在Python中,__getattr__和__getattribute__都是特殊方法,用于访问对象的属性。它们的作用和行为略有不同,具体如下:
以下是一个示例,演示了__getattr__方法的使用:
class Person: def __getattr__(self, name): if name == 'age': return 25 else: raise AttributeError(f''Person' object has no attribute '{name}'')person = Person()print(person.age) # 输出: 25print(person.name) # 引发AttributeError异常
在上述示例中,Person类定义了__getattr__方法。当访问对象的age属性时,由于age属性不存在,__getattr__方法被调用,并返回默认值25。当访问对象的name属性时,name属性同样不存在,__getattr__方法引发AttributeError异常。
以下是一个示例,演示了__getattribute__方法的使用:
class Person: def __init__(self, name, age): self.name = name self.age = age def __getattribute__(self, name): print(f'Accessing attribute: {name}') return object.__getattribute__(self, name)person = Person('Alice', 25)print(person.name) # 输出: 'Accessing attribute: name' 和 'Alice'print(person.age) # 输出: 'Accessing attribute: age' 和 25
在上述示例中,Person类定义了__getattribute__方法。当访问对象的任何属性时,__getattribute__方法被调用并打印出访问的属性名称,然后返回属性的值。
联系客服