axsmak
@axsmak
Создатель

Как правильно взаимодействовать с атрибутами класса Python 3+?

class A:
    name = 'default'

a = A()
a.name = 'new'
print('Name =', a.name)

или
class A:
    __name__ = 'default'

    getName = lambda self: self.__name__

    def setName(self, name):
        self.__name__ = name

a = A()
a.setName('new')
print('Name =', a.getName())


Как по-мне, так первый вариант короче и лаконичнее, а второй - кошернее.
Но всё же - как правильнее?
  • Вопрос задан
  • 205 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Во-первых, присваивание лямбды - это антипаттерн. Во-вторых, идеоматичнее первый вариант. В-третьих, если необходимо реализовать логику доступа к атрибутам, то правильнее будет использовать свойства:

class A:
    def __init__(self, name='default'):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value


a = A()
print(a.name)
a.name = 'test'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы