_attr = ...
@property
def attr(self):
return self._attr
def set_attr(self, value):
self._attr = value
Недавно в какой-то из статей по свойствам находил мнение, что разделение геттеров и сеттеров для питона не идиоматично и принято совмещать все в одной функции
class A:
_attr = ...
@property
def attr(self, value=None):
if value:
self._attr = value
return self._attr
Ты ж в курсе что _attr = ... в теле класса примерно аналогичен понятию static в условной жабе — глобальная переменная общая на все экземпляры класса
Конечно лучше разделять get|set. Лишний if в цикле 20% прибавит к времени выполнения.
Здесь для простоты примера привед - не охото было инициализацию писать отдельно.
ну вот с тобой некоторые не соглашаются на счет разделения например
В самом python есть методы __getattribute__ и __setattr__ явно намикая что это нужно разделять
Это нам как бы намекает, что реализация питона была гораздо раньше, чем появились свойства и там полно легаси, а значит оно нам как бы не на что намекать не может
Ну и к тому же ты апеллируешь к сравнительно низкоуровневой (для нашей темы) реализации, которая может ни о чем не говорить в принципе
Так, погодь, у пропертей сеттер же так пишется class Foo: @property def foo(self): ... @foo.setter def foo(self, value): ...
На нахер! Вот такого не видел. Спасибо.
а как ты поймешь, что человек не пытается задать value=None
"разделение геттеров и сеттеров для питона не идиоматично" наоборот. Для питона идиматично делать все явно
Но вот тут немного иначе это выглядит https://t.me/ru_python/1545274
Но вообще да, вопрос про pep20 остается открытым в этом случае, если мы все через одно свойство делаем
ну надо делать не =None, а создать какой-то объект заглушку
Твой вариант делать методы get_attr & set_attr?
мой вариант: не делать проперти пока не припрет. А если припрет - делать явно сететры
То есть как в первом варианте кода?
ок, спс
Обсуждают сегодня