标签:blog font logs ros wrong 如何 setter round val
案例:
在面向对象编程中,我们把方法作为对象的接口,自己访问对象的属性可能是不安全的,或设计上不灵活,但是使用调用方法在形式上不如访问属性简洁
繁:
circle.getRadius()
circle.setRadius(5.0)
#!/usr/bin/python3
from math import pi
class Circle():
def __init__(self, radius):
self.radius = radius
# 获取半径接口
def get_radius(self):
return self.radius
# 设置半径接口
def set_radius(self, value):
if isinstance(value, (int, float)):
self.radius = float(value)
else:
raise ValueError(‘wrong type‘)
# 获取面积接口
def get_area(self):
return round(self.radius ** 2 * pi, 2)
if __name__ == ‘__main__‘:
c = Circle(3.0)
print(c.get_area())
# 设置半径
c.set_radius(5.0)
print(c.get_radius(), c.get_area())
简:
circle.radius
circle.radius = 5.0
第二种方式看起来更加舒服简洁,如何实现?
如何实现?
# !/usr/bin/python3
from math import pi
class Circle():
def __init__(self, radius):
self.radius = radius
# 获取半径
@property
def get_radius(self):
return self.radius
# 获取面积
@property
def get_area(self):
return round(self.radius ** 2 * pi, 2)
# 设置半径值,指明为get_area函数设置值,但是给哪个函数设置值无关紧要,只要是类属性,其他函数都可以访问
@get_area.setter
def set_radius(self, value):
if isinstance(value, (int, float)):
self.radius = float(value)
else:
raise ValueError(‘wrong type‘)
if __name__ == ‘__main__‘:
c = Circle(3.0)
print(c.get_area)
c.set_radius = 5.0
print(c.get_radius, c.get_area)
# !/usr/bin/python3
from math import pi
class Circle():
def __init__(self, radius):
self.radius = radius
# 获取半径
def get_radius(self):
return self.radius
# 获取面积
def get_area(self):
return round(self.radius ** 2 * pi, 2)
# 设置半径值,
def set_radius(self, value):
if isinstance(value, (int, float)):
self.radius = float(value)
else:
raise ValueError(‘wrong type‘)
# obj.R 调用第一个函数,obj = 5.0 调用第二个函数,进行设置值,没有@property灵活
R = property(get_radius, set_radius)
if __name__ == ‘__main__‘:
c = Circle(3.0)
print(c.get_area())
c.R = 5.0
print(c.R)
print(c.R, c.get_area())
标签:blog font logs ros wrong 如何 setter round val
原文地址:http://www.cnblogs.com/2bjiujiu/p/7287406.html