Python декораторы для получения и установки атрибута - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь создать класс 'Polynomial' в python, он принимает массив np с полиномиальными коэффициентами в качестве входных данных и должен позволить этому атрибуту иметь свойства 'get' и 'set', я пытаюсьчтобы добиться этого с помощью декораторов.Однако, когда я создаю экземпляр объекта Polynomial, кажется, что он не использует мой метод @ coefficients.setter, потому что он не печатает строку 'Установка коэффициентов' и не использует метод @ coefficients.getter.поскольку он не печатает свою строку либо.Возможно, я неправильно использую декораторы?Я использую spyder в качестве своей IDE, может ли это быть причиной проблемы?

class Polynomial ():

    __coefficients = None

     def __init__ ( self , coeffs ):
        self.coefficients = coeffs

    #INTERFACES FOR ATTRIBUTE : __coefficients

    @property
    def coefficients ( self ):
        print('getting coefficients')
        return self . __coefficients

    @coefficients.setter
    def coefficients ( self , coeffs ):
        print('setting coefficients')
        self . __coefficients = np . array ( coeffs )
        self . __order = self . __coefficients . size

    @coefficients . deleter
    def coefficients ( self ):
        del self . __coefficients

Итак, в качестве примера:

 \>>fx = Polynomial([0,0,1])

не будет выводить «установка коэффициентов»и

\>>fx.coefficients

не будет выводить «получение коэффициентов» также, когда я пытаюсь использовать атрибут order в других методах, я получаю сообщение об ошибке, говорящее, что Polynomial не имеет атрибута заказ .

1 Ответ

0 голосов
/ 19 мая 2018

Я нашел ответ на свой вопрос, и оказалось, что классы должны наследовать от объекта, чтобы использовать декораторы 'setter' и 'getter', т.е. мой класс должен выглядеть как

class Polynomial(object):
    #....

на этот вопрос был дан ответ в другом вопросе: Почему у меня не работает сеттер?

На самом деле я не знаю подробностей о том, почему классы 'нового стиля' в Python должны наследоваться отобъект, если кто-нибудь знает точный ответ, почему, я был бы благодарен.

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