Форум сайта python.su
И все-таки. Все равно это соглашения. Ведь никто не запретит пользователю сделать так:
class A: _x = 1 y, z = 2, 3 @property def x(self): return self._x class B: _x = 1 y, z = 2, 3 @property def x(self): return self._x def f(): a = A() b = B() return a.x + b.x + a.y f()
Офлайн
py.user.next
Для внутреннего использования применяются обычные атрибуты. Свойство - это то, что выставляется наружу, это как методы get и set, совмещённые в одном имени.
Офлайн
4kpt_IIIЕсли он так сделает, то изменения в классе сломают его программу. Если это его классы, то он менять их не сможет.
Так для пользователя и разницы, собственно, никакой фактически нет.
a = 1 b = 2 def f(): return a + b f()
Отредактировано py.user.next (Март 13, 2015 03:00:01)
Офлайн
Не-не-не. Как пользователю узнать, что x Вы определили как “свойство”, а y и z - это обычные атрибуты и он их меняет опять на свой страх и риск? И никаких гарантий работоспособности Вашего решения при их изменении или использовании в его коде Вы не даете? Код читать?
Отредактировано 4kpt_III (Март 13, 2015 03:01:21)
Офлайн
4kpt_IIIЛегко, x обязательно описывается в документации, а y и z - по усмотрению.
Как пользователю узнать, что x Вы определили как “свойство”
class A: _x = 1 y, z = 2, 3 @property def x(self): """hello""" return self._x
Help on class A in module __main__:
class A(builtins.object)
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
|
| x
| hello
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| y = 2
|
| z = 3
Офлайн
docstring. И вправду. Обычный атрибут его лишен…
И последний вопрос. Что чаще всего выносится на “свойства”? Есть-ли какой-то общий подход в этом вопросе?
Офлайн
Офлайн
Мда. Это я уже и так глянул. Покопаюсь сам.
Отредактировано 4kpt_III (Март 13, 2015 03:22:48)
Офлайн
AlenЯ думаю, вы не очень понимаете , зачем оно надо.
С чего вы это взяли? Ну если я дал ссылку на PEP8, где собственно это соглашение и описано, вы думаете я его не читал?
obj = model.objects.get(pk=pk) for name, value in model_to_dict(obj).iteritems(): verbose_name = getattr(obj._meta.get_field(name), "verbose_name", None)
queryset = MyModel.objects.all()
Офлайн
vanished
Отредактировано tz4678@gmail.com (Авг. 1, 2020 15:49:32)
Офлайн