Python 3.7: обнаружение имени свойства, принимаемого из класса - PullRequest
0 голосов
/ 08 февраля 2019

Итак, я делаю класс, который может динамически возвращать свойство в зависимости от того, было ли к нему обращено свойство.Он также обнаруживает имя свойства при доступе из класса.мой код класса выглядит следующим образом:

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 (self, instance, owner), но я не уверен, как определить, было ли обращение к свойству из ConfigItem.

Есть ли какие-нибудь вопросы о том, как решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...