почему свойство Python не устанавливает значение атрибута - PullRequest
1 голос
/ 27 марта 2011

Рассмотрим следующий код:

class Class:
    def __init__(self):
        self._value = False
    def GetValue(self):
        return self._value
    def SetValue(self, val):
        self._value = val
    Value = property(GetValue, SetValue)

c = Class()
print c._value, c.Value
False False
c.Value = True
print c._value, c.Value
False True

Почему свойство не вызывает мою функцию? (Я использую Python 2.6.5 для Windows)

Ответы [ 2 ]

9 голосов
/ 27 марта 2011

Вам нужно использовать новый класс стилей (наследовать от объекта), чтобы свойство работало

class Class(object):
    ...
1 голос
/ 28 марта 2011

Если вы хотите получить доступ к своему значению как к свойству, гораздо проще просто использовать атрибут:

class Class(object):
    def __init__(self):
        self.value = False

c = Class()
c.value                # False
c.value = True
c.value                # True

Это не Java, вы можете просто получить доступ к атрибутам простым способом.Если в будущем вы обнаружите, что вам нужно выполнять больше логики как часть доступа к свойству, вы можете изменить класс на использование свойства.

Кстати: стиль Python не должен использовать имена в верхнем регистре для функций исвойства, только имена в нижнем регистре.

...