Python - __get__ не вызывается для моего класса - PullRequest
0 голосов
/ 11 января 2019

Вот мой код:

class Argument :
    def __init__( self, argType, argHelp = None ) :
        self.type = argType
        self.help = argHelp
    def __get__(self, obj, type=None):
        print("__get__")
        return self.type

a  = Argument( "my_ret_value" , argHelp = "some help text "  )

То, что я хочу, это вернуть my_ret_value, но вместо этого я получаю:

<__main__.Argument instance at 0x7ff608ab24d0>

Я прочитал Примеры Python Descriptors и если я изменю свой код, чтобы он работал, - но почему я не могу сделать это в своем классе, как есть? Есть ли другой путь?

РЕДАКТИРОВАТЬ:

Спасибо за комментарии, я не очень хорошо это понял. Может __repr__ решить мою проблему?

Я хочу, чтобы я изменил строковое значение на объект, я хочу обработать этот объект как строку с некоторыми дополнительными атрибутами.

1 Ответ

0 голосов
/ 11 января 2019

Вы можете использовать свой класс decriptor следующим образом:

class B:
    a = Argument("my_ret_value", argHelp="some help text")

b = B()
b.a
# __get__
# 'my_ret_value'

Если он установлен в качестве атрибута класса для другого класса и доступен через экземпляр указанного класса, то вызывается метод дескриптора __get__. См. Руководство по дескриптору .

...