#python #python-3.x #python-decorators
#python #python-3.x #python-декораторы
Вопрос:
Вид разрывается между этим. Это не вопрос о том, как работает свойство, скорее это использование. Я понимаю, что свойство можно использовать для получения, установки, удаления атрибутов. Но мой вопрос в том, можно ли использовать его для действий или методов, когда я знаю, что у метода никогда не будет никаких параметров? Причина для этого — я чувствую, что это более интуитивно понятно
Вот что я имею в виду,
Class Dancer(object):
def __init__(self, name):
self._name = name
#this would be a typical use case
@property
def name(self):
return self._name
#is this ok ?
@property
def dance(self):
print("moves like jagger")
return self
dancer = Dancer("levine")
print(dancer.name)
dancer.dance #why not ?
Я начал делать это для своего проекта (только для случаев, когда это имело смысл). Но начал получать обратную реакцию за это? Что в этом плохого? Есть мысли, предложения?
PS Я знаю, что такие методы никогда не будут иметь параметров
Комментарии:
1. Doc предлагает создавать методы только для чтения. Ваша функция возвращает атрибуты только для чтения, поэтому я не вижу разницы. Он также используется для этого случая:
def size(self): return len(self.data)
с@property
2. Да, но размер также является некоторым свойством, а не истинным действием, например, dance :-). Мой вопрос в том, могу ли я также использовать его для действий, а не только для возврата некоторого значения атрибута
3. Я бы этого не сделал. Если бы я увидел
dancer.dance.name
, мне было бы интересно, где / что, черт возьми, является атрибутом name танцевального объекта?dancer.dance().prance().sleep()
это был бы ожидаемый способ увидеть связанные действия.4. Что вы точно подразумеваете под «действием»? Это не программный термин. Разве это не
len(self.data)
«действие»? Я в замешательстве.5. Или вы говорите, что выполняете какие-то манипуляции:
def dance(self): self.name = 'next_str'
тогда это нарушает определение «только для чтения», поэтому это не рекомендуется.