Херши прав в том, что это зависит от языка. Но чтобы добавить к следам конкретных ответов:
В Python переменная экземпляра - это атрибут экземпляра (обычно), который упоминается в словаре экземпляра. Это аналогично членам или переменным экземпляра в Java, за исключением того, что все общедоступно.
Свойства - это ярлыки для методов получения / установки, которые выглядят как переменная экземпляра . Таким образом, в следующем определении класса (модифицированного из манифеста объекта нового стиля Гвидо *):
class C(object):
def __init__(self):
self.y = 0
def getx(self):
if self.y < 0: return 0
else: return self.y
def setx(self, x):
self.y = x
x = property(getx, setx)
>>> z = C()
>>> z.x = -3
>>> print z.x
0
>>> print z.y
-3
>>> z.x = 5
>>> print z.x
5
>>> print z.y
5
y
- это переменная экземпляра z
, x
- это свойство. (В общем, когда свойство определено, есть некоторые методы, используемые для того, чтобы скрыть связанную переменную экземпляра, чтобы другой код не обращался к нему напрямую.) Преимущество свойств в python заключается в том, что разработчику не нужно обходиться преимущественная инкапсуляция всех переменных экземпляра, поскольку будущая инкапсуляция путем преобразования переменной экземпляра в свойство не должна нарушать какой-либо существующий код (если код не использует лазейки, которые пытается исправить ваша инкапсуляция, или полагается на проверку классов или некоторые другие метаданные -программирование).
Все это очень длинный ответ, чтобы сказать, что на уровне дизайна хорошо говорить о свойствах. Это не зависит от того, какой тип инкапсуляции вам может понадобиться. Я полагаю, что этот принцип не зависит от языка, но применим к языкам помимо Python.