Python: Как заменить свойство обычным атрибутом? - PullRequest
5 голосов
/ 11 февраля 2011

Базовый класс имеет следующее:

def _management_form(self):
    # code here
    return form
management_form = property(_management_form)

В моем производном классе я пытаюсь написать следующее:

self.management_form = self.myfunc()

Но, конечно, это не работаетОн говорит мне «не могу установить атрибут», потому что это свойство не имеет установщика.Но я не хочу устанавливать его, я хочу переопределить, что означает «managent_form».Я попытался поставить del self.managent_form первым, но это тоже не сработало.Так как же мне это сделать?

1 Ответ

6 голосов
/ 11 февраля 2011

Вы можете присвоить классу вместо экземпляра:

MyClass.management_form = property(self.myfunc)

Конечно, это меняет сам класс для всех экземпляров (даже существующих).Если все в порядке, вы также можете вызывать его ровно один раз, а не в каждом конструкторе производного класса (что, я полагаю, то, что вы делаете сейчас).

В противном случае вы можете переопределить его вПроизводный класс в обычном порядке:

class MyOtherClass(MyClass):
    def _new_mf(self):
        # Better code
        return form
    management_form = property(new_mf)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...