Python доступ к одноименным атрибутам класса и экземпляра - PullRequest
0 голосов
/ 10 июля 2020

У меня есть класс с одноименными атрибутами class и instance. Есть ли способ вернуть их уважаемое значение в зависимости от контекста, к которому они обращаются?

Пример:

class A:
    b = 'test'
    @property
    def b(self):
        return 'not test'

Желаемые результаты:

>>> A().b
'not test'
>>> A.b
'test'

Фактические результаты:

>>> A().b
'not test'
>>> A.b
<property object at 0x03ADC640>

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Понятия не имею, зачем вам это нужно, но это сработает:

class ClassWithB(type):
    @property
    def b(self):
        return 'test'


class A(metaclass=ClassWithB):
    @property
    def b(self):
        return 'not test'

Он ведет себя так:

>>> A.b
'test'
>>> A().b
'not test'

Вы также можете использовать, например, дескриптор :

class B:
    def __get__(self, obj, type_=None):
        if obj is None:
            return 'test'
        else:
            return 'not test'

class A:
    b = B()
0 голосов
/ 10 июля 2020

Нет - метод затеняет экземпляр - см. Здесь { ссылка }

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