par*_*ier 35 python lambda properties decorator
哪个是在Python中定义类属性的首选方法?为什么?在一个班级中同时使用两个都可以吗?
@property
def total(self):
return self.field_1 + self.field_2
Run Code Online (Sandbox Code Playgroud)
要么
total = property(lambda self: self.field_1 + self.field_2)
Run Code Online (Sandbox Code Playgroud)
Ton*_*uža 51
对于只读属性,我使用装饰器,否则我通常会这样做:
class Bla(object):
def sneaky():
def fget(self):
return self._sneaky
def fset(self, value):
self._sneaky = value
return locals()
sneaky = property(**sneaky())
Run Code Online (Sandbox Code Playgroud)
更新:
最新版本的python增强了装饰器方法:
class Bla(object):
@property
def elegant(self):
return self._elegant
@elegant.setter
def elegant(self, value):
self._elegant = value
Run Code Online (Sandbox Code Playgroud)
Ben*_*nno 22
在您显示的情况下,装饰器形式可能是最佳的,您希望将该方法转换为只读属性.如果要提供setter/deleter/docstring以及getter,或者如果要为其派生其值的方法添加具有不同名称的属性,则第二种情况更好.