建网站 就能开店,产品网络推广方案设计,百度首页广告,重庆营销型网站制作前言
__init__(self[])
编辑 __call__(self [, ...])
__getitem__(self, key)
__len__(self)
__repr__(self) / __str__(self)
__add__(self, other)
__radd__(self, other)
参考文献 前言
官方定义好的#xff0c;以两个下划线开头且以两个下划线结尾来命名的方法…
前言
__init__(self[])
编辑 __call__(self [, ...])
__getitem__(self, key)
__len__(self)
__repr__(self) / __str__(self)
__add__(self, other)
__radd__(self, other)
参考文献 前言
官方定义好的以两个下划线开头且以两个下划线结尾来命名的方法。在特定情况下它会被自动调用不需要我们主动调用该方法。
__init__(self[])
__init__(self, ...)构造方法在创建对象时自动调用。用于初始化对象的属性。
class Person:def __init__(self, name):print(__init__(self, ...)构造方法在创建对象时自动调用。用于初始化对象的属性。)self.name name
person Person(Alice) # 自动调用 __init__ __call__(self [, ...])
__call__ 方法允许一个类的实例像函数一样被调用。当你定义了这个方法后你可以使用实例对象进行“调用”并触发该方法。以下是一个简单的示例
class Adder:def __init__(self, increment):self.increment incrementdef __call__(self, value):return value self.increment# 创建一个 Adder 实例
add_five Adder(5)
# 像函数一样调用实例
result add_five(10) # 自动调用 __call__
print(result) # 输出: 15
__getitem__(self, key)
__getitem__ 方法允许你使用索引访问对象的元素。当你尝试访问对象的某个键或索引时这个方法会被自动调用。以下是一个示例
class CustomList:def __init__(self, initial_data):self.data initial_datadef __getitem__(self, index):return self.data[index]
# 创建一个 CustomList 实例
my_list CustomList([10, 20, 30, 40, 50])
# 使用索引访问元素
print(my_list[2]) # 输出: 30输出结果为30
在这个例子中CustomList 类实现了 __getitem__ 方法使得我们可以像访问普通列表一样访问其内部的数据。这样my_list[2] 实际上会调用 my_list.__getitem__(2)返回对应的元素。你对这个方法还有其他问题吗
__len__(self)
__len__(self) 是一个特殊方法用于定义一个对象的长度。通常在自定义类中使用以便能够使用 len() 函数获取实例的长度。下面是一个简单的例子
class MyList:def __init__(self, items):self.items itemsdef __len__(self):return len(self.items)# 示例
my_list MyList([1, 2, 3, 4])
print(len(my_list)) # 输出: 4在这个例子中MyList 类实现了 __len__ 方法使得我们可以通过 len(my_list) 获取其内部列表的长度。
__repr__(self) / __str__(self)
__repr__(self) 和 __str__(self) 是两个特殊方法用于定义对象的字符串表示。
__repr__ 旨在返回一个可以用来重新创建该对象的字符串通常用于开发调试。__str__ 则返回一个更易读的字符串通常用于向用户显示。
class Person:def __init__(self, name, age):self.name nameself.age agedef __repr__(self):return fPerson(name{self.name}, age{self.age})def __str__(self):return f{self.name}, {self.age} years old# 示例
person Person(Alice, 30)
print(repr(person)) # 输出: Person(nameAlice, age30)
print(str(person)) # 输出: Alice, 30 years old在这个例子中__repr__ 返回了一个包含对象信息的字符串适合用于调试而 __str__ 返回了一个更简洁、易读的字符串用于用户友好的输出。
__add__(self, other)
__add__(self, other) 是一个特殊方法用于定义对象之间的加法操作。通过实现这个方法你可以自定义如何将两个对象相加。
下面是一个简单的例子展示了如何使用 __add__ 方法
class Vector:def __init__(self, x, y):self.x xself.y ydef __add__(self, other):if isinstance(other, Vector):return Vector(self.x other.x, self.y other.y)return NotImplementeddef __repr__(self):return fVector({self.x}, {self.y})# 示例
v1 Vector(2, 3)
v2 Vector(4, 5)
result v1 v2
print(result) # 输出: Vector(6, 8)在这个例子中Vector 类实现了 __add__ 方法使得可以直接使用 运算符将两个 Vector 对象相加。当 v1 v2 被调用时__add__ 方法被执行返回一个新的 Vector 对象其坐标是两个向量的坐标相加的结果。
__radd__(self, other)
__radd__(self, other) 是一个特殊方法用于定义右加法操作通常在左侧操作数不支持加法时被调用。它允许你在自定义对象的情况下实现与其他类型的加法。
下面是一个例子展示了如何使用 __radd__ 方法
class Vector:def __init__(self, x, y):self.x xself.y ydef __add__(self, other):if isinstance(other, Vector):return Vector(self.x other.x, self.y other.y)return NotImplementeddef __radd__(self, other):# 当其他对象调用 时如果左边的对象不是 Vectorreturn self.__add__(other)def __repr__(self):return fVector({self.x}, {self.y})# 示例
v1 Vector(2, 3)
v2 Vector(4, 5)# 正常加法
result1 v1 v2
print(result1) # 输出: Vector(6, 8)# 使用数字与 Vector 相加
result2 1 v1
print(result2) # 输出: Vector(2, 3)参考文献