我最近了解了@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
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
Python并不是真正具有public-protected-private概念,您仍然可以从外部访问它,但是在某些IDE中,您不会立即在自动完成中看到它,并且会看到警告“访问受保护的成员”。1