在面向对象编程中,我们把方法看做对象的接口。直接访问对象的属性可能是不安全的,或设计上不够灵活,但是使用调用方法在形式上不如访问属性简洁,且但是如果属性声明和定义的过多的话,则在外部将要使用太多的访问器方法。.所以我们通过访问方法的形式直接访问对象的属性
1 通过直接用 property方法
class Demo(object):
def __init__(self, name):
self.name = name
def set_name(self, name):
# 检查数据类型
if isinstance(name, str):
self.name = name
else:
raise TypeError
def get_name(self):
return self.name
# property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
R = property(get_name, set_name)
d = Demo('Dog')
print(d.get_name())
d.set_name('cat')
print(d.get_name())
d.R = 'Duck'
print(d.R)
# Dog
# cat
# Duck
2 通过用装饰器
class Demo(object):
def __init__(self, name):
self.name = name
@property
def P(self):
return self.name
@P.setter
def P(self, name):
self.name = name
d = Demo('Dog')
print(d.P)
d.P = 'Cat'
print(d.P)