Код: Выделить всё
class MyObject(object):
__slots__ = ('_att1', '_att2')
def __init__(self):
self._att1 = None
self._att2 = None
@property
def att1(self):
"""READ-ONLY property. """
return self._att1
@property
def att2(self):
"""att2 property description. """
return self._att2
@att2.setter
def att2(self, val):
self._att2 = val
Код: Выделить всё
a = MyObject()
help(a)
Help on MyObject in module __main__ object:
class MyObject(__builtin__.object)
| Methods defined here:
|
| __init__(self)
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| att1
| READ-ONLY property.
|
| att2
| att2 property description.
с помощью свойств.
Код: Выделить всё
a.att2 = "new value"
Код: Выделить всё
class Derived(MyObject):
__slots__ = ()
def __init__(self):
self._att1 = 1
self._att2 = 0
@property
def att2(self):
"""att2 adds 1 to itself in every call. """
self._att2 += 1
return self._att2
@att2.setter
def att2(self, val):
self._att2 = val
Недавно я начал использовать Pylint, и это сделало мне известно, что я использую «защищенные» переменные в своих производных классах. Причина, по которой я решил опубликовать здесь вопрос, состоит в том, чтобы узнать, приемлемо ли это, чтобы я мог просто подавить эти предупреждения в Pylint. Если это не так, то каковы стандарты для решения этой проблемы?
Еще один момент, который я хотел бы отметить, касается доступа к атрибутам. Что будет быстрее
Код: Выделить всё
a.att1
Код: Выделить всё
a._att1
Это не обсуждение __slots__< /code> и преждевременная оптимизация. Если возможно, предположим, что в исходном посте я не использовал __slots__ и что всё есть в словаре объекта.
Подробнее здесь: https://stackoverflow.com/questions/168 ... -in-python