Python 中property 特性的使用方法

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

诸如此类有很多中用法,大家可以去挖掘!

猜你喜欢

转载自blog.csdn.net/TianPingXian/article/details/80660404
今日推荐