难以理解@property如何知道属性是哪个变量?

问题描述 投票:1回答:1

我最近了解了@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
python properties python-decorators
1个回答
0
投票
def __init__(self, input_name):
    self._my_name = input_name

创建一个受[[1保护的实例成员,称为_my_name。初始化Person

时创建person = Person('name')
现在每次使用person实例时,都可以使用返回该成员的my_name属性。

persom.my_name

由于my_name仅返回值并且不能设置它,因此您可以添加一个设置器以允许使用注释@my_name.setter来更改值。>

person = Person('name') print(person.my_name) # prints name person.my_name = 'new name' print(person.my_name) # prints new name

1

Python并不是真正具有public-protected-private概念,您仍然可以从外部访问它,但是在某些IDE中,您不会立即在自动完成中看到它,并且会看到警告“访问受保护的成员”。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.