面向对象中的装饰器

property

在执行类中的方法时。其结果的值看上去是一个数值。并不是一个动作时。可以在方法上加@property 使其变成属性

在调用时。不需要加括号。

class People:
    def __init__(self,name,weight,height):
        self.name=name
        self.weight=weight
        self.height=height
    @property
    def bmi(self):
        return self.weight / (self.height**2)

p1=People('egon',75,1.85)
print(p1.bmi)

classmethod

当一个方法内没有使用对象(self)时。我们可以在方法上面@classmethod,将他变成一个类方法,调用时,直接使用类名.方法()--变成类方法

class Classmethod_Demo():
    role = 'dog'

    @classmethod
    def func(cls):
        print(cls.role)

Classmethod_Demo.func()

staticmethod

当一个方法内既不用对象。又不用类名时。可以在方法上@staticmethod --变成静态方法

class Staticmethod_Demo():
    role = 'dog'

    @staticmethod
    def func():
        print("当普通方法用")

Staticmethod_Demo.func()

 

posted @ 2019-06-17 15:09  __Invoker  阅读(49)  评论(0编辑  收藏  举报