隐藏类中的属性 | Python从入门到精通:高阶篇之二十七
property装饰器
class Person:
def __init__(self,name):
self._name = name
def name(self):
print('get方法执行了~~~')
return self._name
p = Person('猪八戒')
print(p.name())
执行结果:
此时我们来添加一个property装饰器
class Person:
def __init__(self,name):
self._name = name
@property
def name(self):
print('get方法执行了~~~')
return self._name
p = Person('猪八戒')
print(p.name)
执行结果:
此时调用p.name就相当于在调用get方法。
property装饰器,用来将一个get方法,转换为对象的属性,添加为property装饰器以后,我们就可以像调用属性一样使用get方法。
直接修改name:
p.name = '孙悟空'
执行结果:
因为只提供了get方法而没有set方法,所以不能修改值。
此时需要提供set方法进行修改。
使用property装饰的方法,必须和属性名是一样的。
setter方法的装饰器:@属性名.setter。
class Person:
def __init__(self,name):
self._name = name
@property
def name(self):
print('get方法执行了~~~')
return self._name
@name.setter
def name(self , name):
print('setter方法调用了')
self._name = name
p = Person('猪八戒')
print(p.name)
执行结果:
我们再来添加一个age属性。
class Person:
def __init__(self,name,age):
self._name = name
self._age = age
@property
def name(self):
print('get方法执行了~~~')
return self._name
@name.setter
def name(self , name):
print('setter方法调用了')
self._name = name
@property
def age(self):
return self._age
@age.setter
def age(self , age):
self._age = age
p = Person('猪八戒',18)
p.name = '孙悟空'
print(p.name,p.age)
执行结果:
也可以进行修改:
p.age = 28
执行结果:
只有set,没有get,程序会出错。get是必须的。
配套视频课程,点击这里查看
获取更多资源请订阅Python学习站