在Python中定义属性的首选方法:property decorator还是lambda?

2024-04-18 20:47:52 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中定义类属性的首选方法是什么?为什么?在一个班里两种都用可以吗?

@property
def total(self):
    return self.field_1 + self.field_2

或者

total = property(lambda self: self.field_1 + self.field_2)

Tags: 方法lambdaselffieldreturn属性定义def
3条回答

不要用羊肉做这个。第一种方法对于只读属性是可以接受的,第二种方法用于更复杂的情况。

decorator表单在您所展示的情况下可能是最好的,在这种情况下,您希望将方法转换为只读属性。如果希望提供setter/deleter/docstring和getter,或者希望将具有不同名称的属性添加到从其派生值的方法中,则第二种情况更好。

对于只读属性,我使用decorator,否则通常会执行以下操作:

class Bla(object):
    def sneaky():
        def fget(self):
            return self._sneaky
        def fset(self, value):
            self._sneaky = value
        return locals()
    sneaky = property(**sneaky())

更新:

最新版本的python增强了decorator方法:

class Bla(object):
    @property
    def elegant(self):
        return self._elegant

    @elegant.setter
    def elegant(self, value):
        self._elegant = value

相关问题 更多 >