下面先创建一个计算面积的类:
#!/usr/bin/env python #coding:utf-8 #Created by Andy @ 2017/7/1 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 not isinstance(value, (int, float)): raise ValueError("Wrong type!") self.radius = float(value) def get_area(self): return self.radius ** 2 * pi
这样,如果我需要得到某个实例的半径,或者面积,需要这样做:
c = Circle(3) print(c.get_radius())
但是,有没有更简单的办法呢?
#!/usr/bin/env python #coding:utf-8 #Created by Andy @ 2017/7/1 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 not isinstance(value, (int, float)): raise ValueError("Wrong type!") self.radius = float(value) def get_area(self): return self.radius ** 2 * pi r = property(get_radius, set_radius) c = Circle(3) print(c.r) c.r = 5 print(c.r, c.get_radius())
当然这里property 可以分别设置:
fget fset fdel
这里只需要设置前面的get, 及set方法,所以只写了前两个。
可以看到,经过property的使用,我们可能直接通过对r调用,来实现对 对象属性的 管理