Python get 和 set 方法与 @属性 装饰器

Python get and set methods versus @property decorator

我正在探索 Python 中的装饰器,作为一个从其他语言来到 Python 的人,我对 @property 的目的及其 @xxx.setter兄弟。在Java和C++中,get_xxx()set_xxx()通常是组织封装的方式。在 Python 中,我们有这两个装饰器,它们需要特定的语法和名称匹配才能工作。 @propertyget-set 方法好在哪里?

我已经检查了 this post,但除了 += 运算符的可用性之外,@property 的优点是什么?

对属性使用 property 的最好的部分是 您不需要它

Python 中的理念是 classes 属性和方法都是 public,但按照惯例 - 当您在它们的名称前加上一个“_”前缀时 [=14] =]

描述符协议“属性”背后的机制允许将先前的哑普通属性更改为检测属性,由 getter 和 setter 的代码保护,如果系统演化到需要它的情况。

但默认情况下,class 中的 name 属性只是普通属性。你这样做 person.name = "Name"- 不需要守卫,不需要也不推荐的设置方法。何时以及是否需要对此进行保护(例如,将名称大写,或过滤不正确的词),无论代码使用该属性什么,都不需要更改:使用 属性,属性分配仍然发生“=”运算符。

除此之外,如果对您来说使用“=”并不比 person.set_name("Name") 漂亮,我认为对大多数人来说确实如此。当然,这是主观的。