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())


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

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'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
A3 Payment Москва
от 70 000 до 120 000 руб.
Devhouse Ставрополь
от 70 000 до 120 000 руб.
WB—Tech Санкт-Петербург
До 80 000 руб.