Python 类中的各个方法时
下面是一些常见的特殊方法的介绍和使用示例:
-
__init__(self, ...)
: 初始化方法,在创建类的实例对象时被调用。用于执行一些初始化操作,为对象的属性赋初值。 -
class Person: def __init__(self, name, age): self.name = name self.age = age person = Person("Alice", 25)
-
__str__(self)
: 对象的字符串表示。通过内置的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})" person = Person("Alice", 25) print(person) # 输出:Person(name=Alice, age=25)
-
__getattr__(self, name)
: 获取对象的属性时,如果属性不存在,会自动调用该方法。可以用于在动态访问属性时进行处理或返回默认值。class Person: def __init__(self, name): self.name = name def __getattr__(self, name): return f"Attribute '{name}' not found." person = Person("Alice") print(person.name) # 输出:Alice print(person.age) # 输出:Attribute 'age' not found.
-
__setattr__(self, name, value)
: 设置对象的属性时,会自动调用该方法。可以在设置属性时进行额外的逻辑操作或者属性值的验证。class Person: def __setattr__(self, name, value): if name == "age" and value < 0: raise ValueError("Age cannot be negative.") super().__setattr__(name, value) person = Person() person.age = 25 # 正常赋值 person.age = -5 # 触发异常:ValueError: Age cannot be negative.
-
__len__(self)
: 获取对象的长度。通过内置的len()
函数调用时会自动调用该方法,返回对象的长度或元素个数。class MyList: def __init__(self): self.items = [] def __len__(self): return len(self.items) my_list = MyList() my_list.items = [1, 2, 3, 4, 5] print(len(my_list)) # 输出:5
-
__getitem__(self, key)
: 获取对象的索引或键值时,会自动调用该方法。可以用于支持对象的下标索引或迭代操作。class MyList: def __init__(self): self.items = [] def __getitem__(self, index): return self.items[index] my_list = MyList() my_list.items = [1, 2, 3, 4, 5] print(my_list[0]) # 输出:1 print(my_list[2]) # 输出:3
-
__call__(self, ...)
: 对象被调用时,会自动调用该方法。常用于将类的实例对象作为可调用的函数使用。class Adder: def __call__(self, a, b): return a + b adder = Adder() result = adder(3, 5) print(result) # 输出:8