Свойство Python - PullRequest
       22

Свойство Python

8 голосов
/ 24 января 2010

Вывод выглядит немного подозрительно, учитывая следующий код. Почему «войти в базу» печатается только один раз? И почему вообще не печатается "set in Base"? Фактическое получение / установка, кажется, работает хорошо все же. Чего мне не хватает?

class Base:
    def __init__(self):
        self.s = "BaseStr"

    def getstr(self):
        print "get in Base"
        return self.s
    def setstr(self, s):
        print "set in Base"
        self.s = s
    str = property(getstr, setstr)

b = Base()
print b.str
b.str = "Foo"
print b.str

Выход:

get in Base
BaseStr
Foo

Ответы [ 2 ]

18 голосов
/ 24 января 2010

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

class Base(object):
    ...
0 голосов
/ 24 января 2010

Всякий раз, когда вы создаете новый класс, наследуйте его от типа object.

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