Python get 和 set 方法与 @属性 装饰器
Python get and set methods versus @property decorator
我正在探索 Python 中的装饰器,作为一个从其他语言来到 Python 的人,我对 @property
的目的及其 @xxx.setter
兄弟。在Java和C++中,get_xxx()
和set_xxx()
通常是组织封装的方式。在 Python 中,我们有这两个装饰器,它们需要特定的语法和名称匹配才能工作。 @property
比 get-set
方法好在哪里?
我已经检查了 this post,但除了 +=
运算符的可用性之外,@property
的优点是什么?
对属性使用 property
的最好的部分是 您不需要它。
Python 中的理念是 classes 属性和方法都是 public,但按照惯例 - 当您在它们的名称前加上一个“_”前缀时 [=14] =]
描述符协议“属性”背后的机制允许将先前的哑普通属性更改为检测属性,由 getter 和 setter 的代码保护,如果系统演化到需要它的情况。
但默认情况下,class 中的 name
属性只是普通属性。你这样做 person.name = "Name"
- 不需要守卫,不需要也不推荐的设置方法。何时以及是否需要对此进行保护(例如,将名称大写,或过滤不正确的词),无论代码使用该属性什么,都不需要更改:使用 属性,属性分配仍然发生“=”运算符。
除此之外,如果对您来说使用“=”并不比 person.set_name("Name")
漂亮,我认为对大多数人来说确实如此。当然,这是主观的。
我正在探索 Python 中的装饰器,作为一个从其他语言来到 Python 的人,我对 @property
的目的及其 @xxx.setter
兄弟。在Java和C++中,get_xxx()
和set_xxx()
通常是组织封装的方式。在 Python 中,我们有这两个装饰器,它们需要特定的语法和名称匹配才能工作。 @property
比 get-set
方法好在哪里?
我已经检查了 this post,但除了 +=
运算符的可用性之外,@property
的优点是什么?
对属性使用 property
的最好的部分是 您不需要它。
Python 中的理念是 classes 属性和方法都是 public,但按照惯例 - 当您在它们的名称前加上一个“_”前缀时 [=14] =]
描述符协议“属性”背后的机制允许将先前的哑普通属性更改为检测属性,由 getter 和 setter 的代码保护,如果系统演化到需要它的情况。
但默认情况下,class 中的 name
属性只是普通属性。你这样做 person.name = "Name"
- 不需要守卫,不需要也不推荐的设置方法。何时以及是否需要对此进行保护(例如,将名称大写,或过滤不正确的词),无论代码使用该属性什么,都不需要更改:使用 属性,属性分配仍然发生“=”运算符。
除此之外,如果对您来说使用“=”并不比 person.set_name("Name")
漂亮,我认为对大多数人来说确实如此。当然,这是主观的。