Вы можете использовать свойства в Python для задач этого типа.Сначала вы делаете свой атрибут «приватным», добавляя два подчеркивания, затем создаете метод получения с помощью декоратора @property
:
class MyClass:
def __init__(self, a, b, c):
self.__a, self.__b, self.__c = a, b, c
@property
def a(self):
return self.__a
@property
def b(self):
return self.__b
@property
def c(self):
return self.__c
Теперь вы можете использовать свой класс следующим образом:
>>> my_object = MyClass('foo', 'bar', 'bar')
>>> print(my_object.b)
bar
>>> my_object.b = 42
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: can't set attribute
Примечание
Я написал 'private', потому что вы все равно можете получить к нему доступ, если действительно хотите:
>>> my_object._MyClass__b = 42
>>> print(my_object.b)
42
Это связано с Zen of Python : "Мы все здесь взрослые по обоюдному согласию".