Python 3.7:检测要从类访问的属性的名称

时间:2019-02-07 23:15:05

标签: reflection python-3.7

因此,我正在制作一个可以根据是否访问了属性来动态返回属性的类。当被类访问时,它还会检测属性的名称。我的课程代码如下

class ConfigItem(object):
    value: object
    key:str
    default: object
    __name__:str = None
    def __init__(self, default=None):
        self.default: type(default) = default
        self.value = default
        self.key = "default_value"
    def __get__(self, instance, owner):
        if self.key:
            self.value = os.environ.get(self.key,self.default)
        else: 
            self.value = self.default
    def __set_name__(self, owner, name):
        self.__name__ = name
        self.key = name

我希望代码具有以下行为:

当这样创建时:

a_test_key = ConfigItem('default_value')
a_test_key.key == 'a_test_key' #True

无需将密钥传递给构造函数 并且当这样访问时:

key_value = a_test_key

返回a_test_key.value

但是在通过其他方式访问时,例如:

a_test_key.default
a_test_key.key

返回受尊重的值。

我认为解决方案与 get (自身,实例,所有者)方法有关,但是我不确定如何检测是否已从ConfigItem访问属性。

任何参加者如何解决此问题?

0 个答案:

没有答案