📜  python __getattr__ geeksforgeeks - Python (1)

📅  最后修改于: 2023-12-03 15:18:53.601000             🧑  作者: Mango

Python中的 __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__() 方法可以在动态处理对象属性时非常有用。如果你希望自己的类在试图访问不存在的属性时也不出错,可以尝试使用该方法。