Я читал, что в Python нет строгого применения Encapsulation.
Поскольку атрибуты всегда открыты.И они могут быть достигнуты независимо от того, что вы делаете, даже если вы используете __
префикс члена:
class GetSet(object):
__slots__ = ["__attrval"]
def __init__(self,value):
self.__attrval = value
@property
def var(self):
print 'getting the "var" attribute'
return self.__attrval
@var.setter
def var(self,value):
print 'setting the "var" attribute'
self.__attrval = value
@var.deleter
def var(self):
#print 'deleting the "var" attribute'
self.__attrval = None
obj = GetSet(100)
# print obj.__attrval # error
# obj.__attrval = 200 # error
print obj._GetSet__attrval # got it.
Вы просто инкапсулируете по соглашению, вы используете один _
, чтобы сигнализировать пользователям кода вашей библиотеки, что этоприватный член, и они уважают вас, потому что в противном случае их клиентский код может столкнуться с последствиями в будущем.
Свойства удобны, потому что они позволяют вам полностью избегать методов получения и установки.Если они понадобятся вам позже, вы можете добавить свойство.