📅  最后修改于: 2023-12-03 15:18:53.601000             🧑  作者: Mango
__getattr__
方法在Python中,有许多特殊方法可以被使用。其中之一是 __getattr__()
,它是一个对象的默认属性获取方法。当你试图访问一个不存在的属性时,Python 会调用该方法。
下面是一个使用 __getattr__()
方法的示例:
class Example:
def __init__(self):
self.first_name = 'Tom'
def __getattr__(self, attr):
return f"Attribute '{attr}' not found."
# 使用示例:
ex = Example()
print(ex.first_name) # 输出 'Tom'
print(ex.last_name) # 输出 "Attribute 'last_name' not found."
在示例中,当调用 ex.last_name
时,该对象没有该属性,因此 Python 调用了 __getattr__()
方法。该方法返回一个字符串,指示请求的属性不存在。
使用 __getattr__()
方法的另一个示例是,当你想要在自己的类中插入一些自定义逻辑来处理属性时。 例如,你可以使用该方法在尝试访问所有属性之前,将每个属性都转换为小写字母。
class AttributeLowercaser:
def __init__(self):
self.attributes = {'FirstName': 'John', 'LastName': 'Doe'}
def __getattr__(self, name):
return self.attributes.get(name.lower(), f"Attribute '{name}' not found.")
# 使用示例:
al = AttributeLowercaser()
print(al.firstname) # 输出 'John'
print(al.lAsTnAmE) # 输出 'Doe'
print(al.address) # 输出 "Attribute 'address' not found."
上述示例将 name
转换为小写,并尝试从 self.attributes
字典中获取相应的值。如果未找到该属性,该方法将返回相应的错误信息。
总之,__getattr__()
方法可以在动态处理对象属性时非常有用。如果你希望自己的类在试图访问不存在的属性时也不出错,可以尝试使用该方法。