在Python中定義類屬性的首選方式是什麼?在一個班級中同時使用這兩種語言都可以嗎?在Python中定義屬性的首選方法:property decorator或lambda?
@property
def total(self):
return self.field_1 + self.field_2
或
total = property(lambda self: self.field_1 + self.field_2)
在Python中定義類屬性的首選方式是什麼?在一個班級中同時使用這兩種語言都可以嗎?在Python中定義屬性的首選方法:property decorator或lambda?
@property
def total(self):
return self.field_1 + self.field_2
或
total = property(lambda self: self.field_1 + self.field_2)
不要爲此使用lambdas。第一個是隻讀屬性可以接受的,第二個是與真實方法一起用於更復雜的情況。
因爲我使用裝飾只讀屬性,否則我通常會做這樣的事情:
class Bla(object):
def sneaky():
def fget(self):
return self._sneaky
def fset(self, value):
self._sneaky = value
return locals()
sneaky = property(**sneaky())
更新:
最近的Python版本增強了裝飾方法:
class Bla(object):
@property
def elegant(self):
return self._elegant
@elegant.setter
def elegant(self, value):
self._elegant = value
使用此符號時,我使用flake8,pyflakes時出現錯誤。我重新定義了功能「優雅」的警告。 – Stephan 2012-09-24 10:08:25
使用Pylint,使用裝飾器還有額外的好處。參見[Pylint警告'W0212'具有訪問受保護成員的屬性:如何避免?](http://stackoverflow.com/questions/24833362/pylint-warning-w0212-with-properties-accessing-a-protected-member-如何對avoi)。它保留了Pylint檢查返回值/對象的能力。 – Hibou57 2014-07-18 21:40:01
你在哪裏見過這種「通過拉姆達的財產」,會讓你認爲它可能是「首選」?你有沒有看到很多這些?如果是這樣,在哪裏? – 2010-03-09 11:01:11
@ S.Lott一些Python書,我不記得了。我將從現在開始使用裝飾器。沒問題。 :-) – parxier 2010-03-10 04:45:28