何时使用__getattr__

Dav*_*542 2 python

我遇到了__getattr__内置的,并想知道何时使用它.我很难从文档
http://docs.python.org/reference/datamodel.html#中考虑实际使用.什么是如何在代码中使用和有用的实际例子?

Chr*_*ris 8

一个例子是使用带有字典的对象表示法.例如,考虑字典

myDict = {'value': 1}
Run Code Online (Sandbox Code Playgroud)

通常在Python中,可以访问'value'变量

myDict['value']
Run Code Online (Sandbox Code Playgroud)

它将1在Python解释器上打印.但是,人们可能希望使用myDict.value符号.这可以通过使用以下类来实现:

class DictAsMember(dict):
    def __getattr__(self, name):
        value = self[name]
        if isinstance(value, dict):
            value = DictAsMember(value)
        return value

my_dict = DictAsMember()
my_dict['property'] = {'sub_property': 1}

print(my_dict.property.sub_property) # 1 will be printed
Run Code Online (Sandbox Code Playgroud)