列举Python面向对象中的特殊成员以及应用场景?
参考答案:
Python 面向对象编程中有许多特殊成员(也称为魔术方法或双下划线方法),它们在特定场景下自动被 Python 解释器调用。以下是其中的一些以及它们的应用场景:
__init__(self, [args...])
:这是一个构造函数,用于初始化新创建的对象。当创建类的新实例时,这个方法会被自动调用。通常,它用于设置对象的初始状态或执行任何在对象创建时必须进行的设置。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
__str__(self)
:这个方法返回一个对象的字符串表示。当你尝试打印一个对象时,Python 会自动调用这个方法。
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})"
__repr__(self)
:这个方法返回一个对象的“官方”字符串表示。它应该返回一个字符串,该字符串可以通过eval()
函数重新创建对象。如果没有定义__str__()
,那么print()
函数会调用__repr__()
。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person('{self.name}', {self.age})"
__call__(self, [args...])
:这个方法使得对象可以被像函数一样调用。
class Adder:
def __init__(self, x):
self.x = x
def __call__(self, y):
return self.x + y
adder = Adder(5)
print(adder(3)) # 输出 8
__getitem__(self, key)
、__setitem__(self, key, value)
和__delitem__(self, key)
:这些方法允许对象使用方括号表示法(如字典和列表)进行索引、赋值和删除操作。
class MyDict:
def __init__(self):
self.data = {}
def __getitem__(self, key):
return self.data[key]
def __setitem__(self, key, value):
self.data[key] = value
def __delitem__(self, key):
del self.data[key]
d = MyDict()
d['key'] = 'value'
print(d['key']) # 输出 'value'
del d['key']
__len__(self)
:这个方法返回对象的长度。当你对对象使用内置函数len()
时,Python 会自动调用这个方法。
class MyList:
def __init__(self):
self.items = []
def append(self, item):
self.items.append(item)
def __len__(self):
return len(self.items)
l = MyList()
l.append(1)
l.append(2)
l.append(3)
print(len(l)) # 输出 3
__eq__(self, other)
、__ne__(self, other)
、__lt__(self, other)
、__le__(self, other)
、__gt__(self, other)
和__ge__(self, other)
:这些方法定义了对象的比较运算符的行为。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
return self.name == other.name and self.age == other.age
p1 = Person('Alice', 25)
p2 = Person('Alice', 25)
print(p1 == p2) # 输出 True
这只是 Python 面向对象编程中特殊成员的一小部分,实际上还有很多其他的特殊成员,每个都有其特定的应用场景。