python - 无法理解 @property 如何知道哪个变量是属性?

标签 python properties python-decorators

我最近了解了 @property 装饰器,但(至少)有一件事我还不明白。在下面的这个类中,my_name 显然是属性名称,但根本不清楚该值实际上是如何分配的。唯一的赋值是下划线的 _my_name 变量,但是装饰器如何知道 self._my_name 对应于 my_name 属性?

class Person:
    def __init__(self, input_name):
        self._my_name = input_name

    @property
    def my_name(self):
        return self._my_name

    @my_name.setter
    def my_name(self, value):
        self._my_name = value

最佳答案

尝试这样看,装饰器对类的内部结构一无所知,例如:self._my_name。它所知道的就是检索或设置值时要调用的函数。

p = Person('bob')
name = p.my_name     ## the 'getter' function is called: ultimately p.my_name(self)
p.my_name = 'alice'  ## the 'setter' function is called: ultimately p.my_name(self, 'alice')

这里,在幕后,还有更多的事情发生。看看类似的问题:How does the @property decorator work? 最上面的答案很好地解释了@property是什么以及它的作用。

关于python - 无法理解 @property 如何知道哪个变量是属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59979613/

相关文章:

python - 如何对不同长度的 "identical"字符串进行 GROUP BY?

javascript - AngularJS Orderby 属性名称中带有空格

c# - 分配给属性没有效果

python - 类方法中的装饰器

python-2.7 - 如何将关键字参数添加到 Python 2.7 中的包装函数?

python - 鸭子在 python 中打洞

python - 让 bash 脚本将多个程序作为单独的进程执行

c# - 如何在不修改继承类(基类)的情况下隐藏类中的继承属性?

python - 将修改后的状态传递给外部嵌套装饰器

python - 限制外键数量,每个外键指一周中的某一天