在 Python 中,类的非凡办法是一组以双下划线(__
)开始和完结的办法。这些办法在特定状况下被主动调用,从而容许咱们定制类的行为。在这一节中,咱们将探讨一些罕用的非凡办法,并通过实例代码展现如何应用它们。
4.4.1 __init__
办法
__init__
办法是一个类的构造方法。当创立类的实例时,它会被主动调用。__init__
办法通常用于初始化类的属性。以下是一个示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("Alice", 30)
print(p1.name) # 输入后果:Alice
print(p1.age) # 输入后果:30
在这个示例中,咱们定义了一个名为 Person
的类,它具备两个属性:name
和 age
。咱们在 __init__
办法中初始化这些属性。当咱们创立 Person
类的实例时,__init__
办法被主动调用,从而设置 name
和 age
属性的值。
4.4.2 __str__
办法
__str__
办法用于定义类的实例的字符串示意。当应用 print()
函数打印类的实例时,它会被主动调用。以下是一个示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person(name={self.name}, age={self.age})"
p1 = Person("Alice", 30)
print(p1) # 输入后果:Person(name=Alice, age=30)
在这个示例中,咱们为 Person
类定义了一个 __str__
办法。这个办法返回一个蕴含 name
和 age
属性值的字符串。当咱们应用 print()
函数打印 Person
类的实例时,__str__
办法被主动调用,从而打印出实例的字符串示意。
4.4.3 __repr__
办法
__repr__
办法用于定义类的实例的“官网”字符串示意。它的次要目标是为开发者提供一个明确的、不歧义的实例示意。当在交互式解释器中输出类的实例时,它会被主动调用。以下是一个示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person(name={self.name!r}, age={self.age!r})"
p1 = Person("Alice", 30)
print(repr(p1)) # 输入后果:Person(name='Alice', age=30)
在这个示例中,咱们为 Person
类定义了一个 __repr__
办法。这个办法返回一个蕴含 name
和 age
属性值的字符串,应用 !r
格局说明符将属性值转换为它们的 repr()
示意。当咱们在交互式解释器中输出 Person
类的实例时,__repr__
办法被主动调用,从而输入实例的“官网”字符串示意。
4.4.4 算术运算符重载
在 Python 中,咱们能够通过定义非凡办法来重载算术运算符,从而实现类的实例之间的算术运算。以下是一个示例:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __sub__(self, other):
return Vector(self.x - other.x, self.y - other.y)
def __str__(self):
return f"({self.x}, {self.y})
在这个示例中,咱们定义了一个名为 Vector
的类,它具备两个属性:x
和 y
。咱们还定义了两个非凡办法:__add__
和 __sub__
,它们别离用于重载加法运算符 +
和减法运算符 -
。当咱们对 Vector
类的实例执行加法或减法运算时,这些非凡办法被主动调用。
v1 = Vector(1, 2)
v2 = Vector(3, 4)
v3 = v1 + v2
print(v3) # 输入后果:(4, 6)
v4 = v1 - v2
print(v4) # 输入后果:(-2, -2)
在这个示例中,咱们创立了两个 Vector
类的实例 v1
和 v2
。咱们应用加法运算符 +
将它们相加,从而调用 __add__
办法。相似地,咱们应用减法运算符 -
将它们相减,从而调用 __sub__
办法。
4.4.5 比拟运算符重载
咱们还能够通过定义非凡办法来重载比拟运算符,从而实现类的实例之间的比拟。以下是一个示例:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
return self.age == other.age
def __lt__(self, other):
return self.age < other.age
def __le__(self, other):
return self.age <= other.age
def __str__(self):
return f"Person(name={self.name}, age={self.age})"
在这个示例中,咱们为 Person
类定义了三个非凡办法:__eq__
、__lt__
和 __le__
,它们别离用于重载等于运算符 ==
、小于运算符 <
和小于等于运算符 <=
。当咱们对 Person
类的实例执行这些比拟运算时,这些非凡办法被主动调用。
p1 = Person("Alice", 30)
p2 = Person("Bob", 25)
print(p1 == p2) # 输入后果:False
print(p1 < p2) # 输入后果:False
print(p1 <= p2) # 输入后果:False
在这个示例中,咱们创立了两个 Person
类的实例 p1
和 p2
。咱们应用等于运算符 ==
对它们进行比拟,从而调用 __eq__
办法。相似地,咱们应用小于运算符 <
和小于等于运算符 <=
别离调用 __lt__
和 __le__
办法。
这些只是 Python 非凡办法的一部分示例。还有许多其余非凡办法,它们能够用于定制类的行为。要理解更多对于非凡办法的信息,能够参考 Python 官网文档:https://docs.python.org/3/reference/datamodel.html#special-method-names。
举荐浏览:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g