Trăn __neg__

Các phương thức ma thuật trong Python là các phương thức đặc biệt bắt đầu và kết thúc bằng dấu gạch dưới kép. Chúng còn được gọi là phương pháp dunder. Các phương thức ma thuật không có nghĩa là bạn phải gọi trực tiếp, nhưng việc gọi xảy ra bên trong lớp trên một hành động nhất định. Ví dụ: khi bạn cộng hai số bằng toán tử +, bên trong, phương thức

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
2 sẽ được gọi

Các lớp tích hợp trong Python định nghĩa nhiều phương thức ma thuật. Sử dụng hàm

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
3 để xem số lượng phương thức ma thuật được kế thừa bởi một lớp. Ví dụ: phần sau đây liệt kê tất cả các thuộc tính và phương thức được định nghĩa trong lớp
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
4

>>> dir[int]
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '

Như bạn có thể thấy ở trên, lớp int bao gồm nhiều phương thức ma thuật khác nhau được bao quanh bởi hai dấu gạch dưới. Ví dụ: phương thức

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
5 là một phương thức kỳ diệu được gọi khi chúng ta cộng hai số bằng toán tử +. Xem xét ví dụ sau

>>> num=10
>>> num + 5
15
>>> num. __add__[5]
15

Như bạn có thể thấy, khi bạn thực hiện

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
6, toán tử + sẽ gọi phương thức
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
7. Bạn cũng có thể gọi trực tiếp
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
0 sẽ cho kết quả tương tự. Tuy nhiên, như đã đề cập trước đây, các phương thức ma thuật không được gọi trực tiếp mà được gọi bên trong, thông qua một số phương thức hoặc hành động khác

Các phương thức ma thuật được sử dụng thường xuyên nhất để xác định các hành vi quá tải của các toán tử được xác định trước trong Python. Chẳng hạn, các toán tử số học theo mặc định hoạt động trên các toán hạng số. Điều này có nghĩa là các đối tượng số phải được sử dụng cùng với các toán tử như +, -, *, /, v.v. Toán tử + cũng được định nghĩa là toán tử nối trong các lớp chuỗi, danh sách và bộ. Chúng ta có thể nói rằng toán tử + bị quá tải

Để làm cho hành vi quá tải có sẵn trong lớp tùy chỉnh của riêng bạn, phương thức ma thuật tương ứng phải được ghi đè. Ví dụ: để sử dụng toán tử + với các đối tượng của lớp do người dùng định nghĩa, cần bao gồm phương thức

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
2

Hãy xem cách thực hiện và sử dụng một số phương pháp ma thuật quan trọng

phương thức __new__[]

Các ngôn ngữ như Java và C# sử dụng toán tử new để tạo một thể hiện mới của một lớp. Trong Python, phương thức ma thuật

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
2 được gọi ngầm trước phương thức
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
3. Phương thức
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
2 trả về một đối tượng mới, sau đó được khởi tạo bởi
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
3

Ví dụ. __Mới__[]

Sao chép

class Employee:
    def __new__[cls]:
        print ["__new__ magic method is called"]
        inst = object.__new__[cls]
                return inst
    def __init__[self]:
        print ["__init__ magic method is called"]
        self.name='Satya'

Ví dụ trên sẽ tạo ra kết quả sau khi bạn tạo một thể hiện của lớp

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
6

>>> emp = Employee[]
__new__ phương thức ma thuật được gọi
__init__ phương thức ma thuật được gọi

Do đó, phương thức

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
2 được gọi trước phương thức
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
3

phương thức __str__[]

Một phương pháp ma thuật hữu ích khác là

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
9. Nó bị ghi đè để trả về một biểu diễn chuỗi có thể in được của bất kỳ lớp nào do người dùng xác định. Chúng ta đã thấy hàm tích hợp sẵn
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
00 trả về một chuỗi từ tham số đối tượng. Ví dụ:
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
01 trả về '12'. Khi được gọi, nó gọi phương thức
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
9 trong lớp int

>>> num=12
>>> str[num]
'12'
>> . __str__[num]
>>> int.__str__[num]
'12'

Bây giờ chúng ta hãy ghi đè phương thức

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
9 trong lớp Nhân viên để trả về một chuỗi đại diện cho đối tượng của nó

Ví dụ. __str__[]

Sao chép

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]

Xem cách hàm

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
00 gọi nội bộ phương thức
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
9 được định nghĩa trong lớp Nhân viên. Đây là lý do tại sao nó được gọi là một phương pháp kỳ diệu

>>> e1=Employee[]
>>> print[e1]
name=Lương Swati=$10000

phương thức __add__[]

Trong ví dụ sau, một lớp có tên là khoảng cách được định nghĩa với hai thuộc tính thể hiện - ft và inch. Việc cộng hai đối tượng khoảng cách này được mong muốn được thực hiện bằng cách sử dụng toán tử + nạp chồng

Để đạt được điều này, phương thức ma thuật

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
2 được ghi đè, thực hiện phép cộng các thuộc tính ft và inch của hai đối tượng. Phương thức
class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
9 trả về biểu diễn chuỗi của đối tượng

Ví dụ. Ghi đè __add__[]

Sao chép

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
0

Chạy tập lệnh Python ở trên để xác minh hoạt động quá tải của toán tử +

>>> d1=khoảng cách[3,10]
>>> d2=khoảng cách[4,4]
>>> print[ . định dạng[d1, d2]]
d1= ft. 3 trong. 10 d2=ft. 4 trong. 4
>>> d3=d1+d2
>>> print[d3]
ft. 8 trong. 2

phương thức __ge__[]

Phương thức sau đây được thêm vào lớp khoảng cách để quá tải toán tử

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
08

Ví dụ. __ge__[]

Sao chép

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
0

Phương thức này được gọi khi toán tử

class Employee:
    def __init__[self]:
        self.name='Swati'
        self.salary=10000
    def __str__[self]:
        return 'name='+self.name+' salary=$'+str[self.salary]
08 được sử dụng và trả về Đúng hoặc Sai. Theo đó, thông báo thích hợp có thể được hiển thị

>>> d1=khoảng cách[2,1]
>>> d2=khoảng cách[4,10]
>>> d1>
False

Phương pháp ma thuật quan trọng

Các bảng sau liệt kê các phương thức ma thuật quan trọng trong Python 3

Khởi tạo và xây dựngMô tả__new__[cls, other]Để được gọi khi khởi tạo đối tượng. __init__[self, other]Để được gọi bằng phương thức __new__. __del__[self]Phương thức hủy

Toán tử và hàm đơn nguyênDescrip__pos__[self]Để được gọi cho e dương đơn nguyên. g. +đối tượng nào đó. __neg__[self]Để được gọi cho e âm đơn nguyên. g. -đối tượng nào đó. __abs__[self]Để được gọi bởi hàm abs[] tích hợp. __invert__[self]Để được gọi đảo ngược sử dụng toán tử ~. __round__[self,n]Để được gọi bởi hàm round[] tích hợp. __floor__[self]Để được gọi bằng toán học tích hợp. hàm sàn []. __ceil__[self]Để được gọi bằng toán học tích hợp. chức năng trần[]. __trunc__[self]Để được gọi bằng toán học tích hợp. hàm trunc[]

Augmented AssignmentDescription__iadd__[self, other]To get called on addition with assignment e.g. a +=b.__isub__[self, other]To get called on subtraction with assignment e.g. a -=b.__imul__[self, other]To get called on multiplication with assignment e.g. a *=b.__ifloordiv__[self, other]To get called on integer division with assignment e.g. a //=b.__idiv__[self, other]To get called on division with assignment e.g. a /=b.__itruediv__[self, other]To get called on true division with assignment__imod__[self, other]To get called on modulo with assignment e.g. a%=b.__ipow__[self, other]To get called on exponentswith assignment e.g. a **=b.__ilshift__[self, other]To get called on left bitwise shift with assignment e.g. a=b.__iand__[self, other]To get called on bitwise AND with assignment e.g. a&=b.__ior__[self, other]To get called on bitwise OR with assignment e.g. a|=b.__ixor__[self, other]To get called on bitwise XOR with assignment e.g. a ^=b.

Các phương thức ma thuật chuyển đổi loạiMô tả__int__[self]Để được gọi bằng phương thức int[] tích hợp để chuyển đổi một loại thành int. __float__[self]Để được gọi bằng phương thức float[] tích hợp để chuyển đổi một loại thành float. __complex__[self]Để được gọi bằng phương thức int complex[] để chuyển đổi một loại thành phức tạp. __oct__[self]Để được gọi bằng phương thức int oct[] tích hợp để chuyển đổi một loại thành bát phân. __hex__[self]Để được gọi bằng phương thức hex[] tích hợp để chuyển đổi một loại thành thập lục phân. __index__[self]Để được gọi khi chuyển đổi kiểu thành int khi đối tượng được sử dụng trong biểu thức lát cắt. __trunc__[self]Để được gọi từ toán học. phương thức trunc[]

Các phương thức ma thuật chuỗiDescription__str__[self]Để được gọi bằng phương thức str[] tích hợp để trả về một biểu diễn chuỗi của một loại. __repr__[self]Để được gọi bằng phương thức repr[] tích hợp để trả về một đại diện có thể đọc được bằng máy của một loại. __unicode__[self]Để được gọi bằng phương thức unicode[] tích hợp để trả về một chuỗi unicode thuộc loại. __format__[self, formattr]Để được gọi bằng chuỗi int tích hợp. format[] để trả về một kiểu chuỗi mới. __hash__[self]Để được gọi bằng phương thức hash[] tích hợp để trả về một số nguyên. __nonzero__[self]Để được gọi bằng phương thức bool[] tích hợp để trả về Đúng hoặc Sai. __dir__[self]Để được gọi bằng phương thức int dir[] để trả về danh sách các thuộc tính của một lớp. __sizeof__[self]Để được gọi bởi sys tích hợp. phương thức getsizeof[] để trả về kích thước của một đối tượng

Thuộc tính Magic MethodsDescription__getattr__[self, name] Được gọi khi thuộc tính truy cập của một lớp không tồn tại. __setattr__[self, name, value] Được gọi khi gán giá trị cho thuộc tính của một lớp. __delattr__[self, name]Được gọi khi xóa một thuộc tính của một lớp

Các phương thức ma thuật của toán tửMô tả__add__[self, other]Để được gọi trong phép toán cộng sử dụng + operator__sub__[self, other]Để được gọi trong phép toán trừ sử dụng - toán tử. __mul__[self, other]Để được gọi trong phép toán nhân sử dụng toán tử *. __floordiv__[self, other]Để được gọi trong thao tác chia tầng sử dụng toán tử //. __truediv__[self, other]Để được gọi trong phép toán chia sử dụng toán tử /. __mod__[self, other]Để được gọi trên thao tác modulo sử dụng toán tử %. __pow__[self, other[, modulo]]Để được gọi khi tính toán công suất sử dụng toán tử **. __lt__[self, other]Để được gọi khi so sánh sử dụng toán tử

Chủ Đề