import math
class Circle:
def __init__(self, radius):
self.radius = radius
@property
def area(self):
return math.pi * self.radius ** 2
@property
def diameter(self):
return self.radius ** 2
@property
def perimeter(self):
return 2 * math.pi * self.radius
c = Circle(20)
print(c.radius)
print(c.area)
print(c.diameter)
print(c.perimeter)
在Python中,我们唱会看到@property 装饰器
这上面这个代码中的例子里面,为只读特性,用来返回数据时,函数作为属性返回。
常规模式下,我们调用需要这样调用
c = circle(20)
print(c.radius)
print(c.area())
print(c.diameter())
print(c.perimeter())
@property 的用法很多,我们还可以用来检测,setattr 值是否符合我们的要求
class Demo:
def __init__(self,name):
self.name=name
@property
def name(self):
return self._name
@demo.setter
def name(self,value):
if not isinstance(value,str):
raise TypeError('Type worng')
self._name=value
我们可以在子类中对这个方法进行扩展,重载
class SubDemo(Demo):
#我们根据自己的情况可以选择在子类中对应的方法进行扩展
@Demo.name.setter
def name(self,value):
super(SubDemo,SubDemo).name.__set__(self,value)
@Demo.name.getter
def name(self):
return super().name
诸如此类有很多中用法,大家可以去挖掘!