Preferred way of defining properties in Python: property decorator or lambda?

那年仲夏 提交于 2020-01-10 07:39:08

问题


Which is the preferred way of defining class properties in Python and why? Is it Ok to use both in one class?

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

or

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

回答1:


The decorator form is probably best in the case you've shown, where you want to turn the method into a read-only property. The second case is better when you want to provide a setter/deleter/docstring as well as the getter or if you want to add a property that has a different name to the method it derives its value from.




回答2:


For read-only properties I use the decorator, else I usually do something like this:

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

update:

Recent versions of python enhanced the decorator approach:

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

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



回答3:


Don't use lambdas for this. The first is acceptable for a read-only property, the second is used with real methods for more complex cases.



来源:https://stackoverflow.com/questions/2406567/preferred-way-of-defining-properties-in-python-property-decorator-or-lambda

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!