class Duck():
def __init__(self, input_name):
self.hidden_name = input_name
def get_name(self):
print('inside the getter')
return self.hidden_name
def set_name(self, input_name):
print('inside the setter')
self.hidden_name = input_name
name = property(get_name, set_name) # property将get_name转换为getter方法,set_name为setter方法
a = Duck('hhh')
print(a.name) # 会自动调用get_name,打印inside the getter并返回hhh
print(a.hidden_name) # 仍然可以直接访问hidden_name
class Duck():
def __init__(self, input_name):
self.hidden_name = input_name
@property
def name2(self): # 另外一种设置getter方法的方法
print('inside the getter')
return self.hidden_name
@name2.setter
def set(self, input_name): # setter方法
print('inside the setter')
self.hidden_name = input_name
a = Duck('hhh')
print(a.name2)
class Circle():
def __init__(self, radius):
self.radius = radius
@property
def diameter(self): # 将方法转换为属性
return 2 * self.radius
c = Circle(5)
print(c.diameter) # 返回10
c.radius = 7
print(c.diameter) # 可动态计算,返回14
try:
c.diameter = 15 # 因为没有在类中指定setter方法@diameter.setter,所以无法从外部设置
except Exception as exc:
print(exc)
class Circle():
def __init__(self, radius):
self.radius = radius
self.diameter = 2 * self.radius
c = Circle(5)
print(c.diameter) # 返回10
c.radius = 7
print(c.diameter) # 不可动态计算,返回10
参考资料:《Python语言及其应用》【美】卢巴诺维奇 著