📅  最后修改于: 2023-12-03 15:06:48.495000             🧑  作者: Mango
Python中的Magic方法或Dunder方法是指以双下划线开头和结尾的特殊方法,比如__init__
,__repr__
,__str__
等。通过定义这些方法,我们可以自定义Python类的一些特殊行为,从而让我们的代码更加简洁和易于使用。
__init__
方法__init__
方法是Python类中最常见的Magic方法之一,用于初始化类的实例。例如,我们可以定义一个Person
类并在__init__
方法中设置它的name
和age
属性:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
然后我们就可以创建Person
类的实例并访问它的属性了:
person = Person('John', 30)
print(person.name) # John
print(person.age) # 30
__repr__
和__str__
方法__repr__
方法用于返回这个对象的表达式形式,通常用于调试或开发环境中查看对象状态。而__str__
方法用于返回对象的字符串形式,通常用于用户界面和输出信息。
例如,我们可以在上面的Person
类中定义这两个方法:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f'Person(name={self.name}, age={self.age})'
def __str__(self):
return f'{self.name} ({self.age})'
现在我们就可以使用__repr__
方法和__str__
方法访问这个类的不同表示形式:
person = Person('John', 30)
print(repr(person)) # Person(name=John, age=30)
print(str(person)) # John (30)
__len__
方法__len__
方法用于返回对象的长度,通常用于容器类,比如列表、元组、字典等。例如,我们可以定义一个Circle
类,并在__len__
方法中返回它的直径:
class Circle:
def __init__(self, radius):
self.radius = radius
def __len__(self):
return self.radius * 2
现在我们就可以使用len
函数来访问这个类的长度了:
circle = Circle(5)
print(len(circle)) # 10
__eq__
和__lt__
方法__eq__
方法和__lt__
方法分别用于定义对象相等和不等关系以及对象大小关系。例如,我们可以定义一个Rectangle
类,然后在__eq__
方法中比较两个矩形的面积大小:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def __eq__(self, other):
return self.area() == other.area()
def __lt__(self, other):
return self.area() < other.area()
现在我们就可以创建两个Rectangle
类的实例并比较它们的大小了:
rect1 = Rectangle(5, 10)
rect2 = Rectangle(6, 8)
print(rect1 == rect2) # False
print(rect1 < rect2) # True
__call__
方法__call__
方法用于使对象可以像函数一样被调用。例如,我们可以定义一个Counter
类,实现一个简单的计数器,并在__call__
方法中实现自增:
class Counter:
def __init__(self):
self.count = 0
def __call__(self):
self.count += 1
return self.count
现在我们就可以创建这个类的实例,并将其作为函数来调用:
counter = Counter()
print(counter()) # 1
print(counter()) # 2
print(counter()) # 3
以上是Python中常用的一些Magic方法或Dunder方法,通过定义这些方法,我们可以自定义Python类的特殊行为,使代码更加简洁和易于使用。