想要访问一个类的某个属性
并且修改它
有下面三种方法
# 法1
class Demo(object):
def __init__(self):
self._name = "Demo"
self.aim = "for fun"
self.owner = "nobody"
self.ownersage = 20
test = Demo()
print(test._name)
test._name = 123
print(test._name)
# 法2
class Demo(object):
def __init__(self):
self._name = "Demo"
self.aim = "for fun"
self.owner = "nobody"
self.ownersage = 20
def get_name(self):
return self._name
def set_name(self,value):
if not isinstance(value, str):
raise ValueError("name must be str")
self._name = value
test = Demo()
print(test.get_name())
test.set_name(123)
#法3
class Demo(object):
def __init__(self):
self._name = "Demo"
self.aim = "for fun"
self.owner = "nobody"
self.ownersage = 20
@property
def name(self):
return self._name
@name.setter
def name(self, value):
if not isinstance(value,str):
raise ValueError("name must be str")
self._name = value
test = Demo()
print(test.name)
test.name = "haha"
print(test.name)
法1中,将name属性设置成了123,但是如果name必须是str类型怎么办?
所以法2中采用了set_name方法来解决这一问题,如果输入类型错误,则报错
但是这样太繁琐,特别是实例化后,还要通过instancename.get_name\set_name来获得\修改类属性
所以法3中采用了property修饰器:
在def name(self)
方法前面添加了@property,可以将这个方法修饰成一个属性。在需要访问类属性_name时,只需要通过instancename.name就能访问;与之对应的@name.setter也同样如此,只需要通过instancename.name = ???来进行修改类属性。
关于其他修饰器:tobecontinued