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)
It is used to give "special" functionality to certain methods to make them act as getters, setters, or deleters when we define properties in a class.
You can create a property by calling property() with an appropriate set of arguments and assigning its return value to a class attribute. All the arguments to property() are optional. However, you typically provide at least a setter function.
The property() method in Python provides an interface to instance attributes. It encapsulates instance attributes and provides a property, same as Java and C#. The property() method takes the get, set and delete methods as arguments and returns an object of the property class.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With