I am exploring decorators in Python, and as a person who came to Python from other languages, I am a bit confused about the purpose of @property
and its @xxx.setter
brother. In Java and C++ get_xxx()
and set_xxx()
are usually the way to organize encapsulation. In Python we have these two decorators, which require specific syntax, and name matching in order to work. How is @property
better than get-set
methods?
I have checked this post and still, what are the advantages of @property
besides the availability of the +=
operator?
The best part of using property
for an attribute is that you don't need it .
The philosophy in Python is that classes attributes and methods are all public, but by convention - when you prefix their name with a single "_"
The mechanism behing "property", the descriptor protocol, allows one to change a previous dumb plain attribute into an instrumented attribute, guarded with code for the getter and setter, if the system evolves to a situation where it is needed.
But by default, a name
attribute in a class, is just a plain attribute. You do person.name = "Name"
- no guards needed, no setting method needed nor recommended. When and if it one needs a guard for that (say, to capitalize the name, or filter on improper words), whatever code uses that attribute needs no change: with the use of property, attribute assignment still takes place with the "=" operator.
Other than that, if using "=" does not look prettier than person.set_name("Name")
for you, I think it does for most people. Of course, that is subjective.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.