你能解释一下装饰器在Python中是什么吗?

时间:2016-07-05 10:20:42

标签: python python-3.x decorator python-decorators

我正在学习Python OOP,我得到了装饰器的主题,但我用于学习的材料并没有深入介绍。 我发布了示例代码:

class Duck:
    def __init__(self, **kwargs):
        self.properties = kwargs

    def quack(self):
        print("Quaaack!")

    def walk(self):
        print("Walk like a duck.")

    def get_properties(self):
        return self.properties

    def get_property(self, key):
        return self.properties.get(key, None)

    @property
    def color(self):
        return self.properties.get("color", None)

    @color.setter
    def color(self, c):
        self.properties["color"] = c

    @color.deleter
    def color(self):
        del self.properties["color"]

def main():
    donald = Duck()
    donald.color = "blue"
    print(donald.color)

if __name__ == "__main__": main()

你能帮我理解装饰者的重要性吗? 你能用简单的词语解释装饰的概念吗?

1 个答案:

答案 0 :(得分:1)

让我写一些我可以简单说出的关于上述代码的内容,

通常说装饰者是

  

"函数装饰器只是现有函数的包装器"

装饰器总是包装另一个函数,更不用说装饰器本身就是一个函数

在上面的代码中,您正在设置,获取,删除属性/正式属于" duck"这是一种颜色。

装饰师总是从' @'开始。 @property是一个预定义的装饰器函数,用于获取类的getter,setter和del函数

    @property #getter
    def color(self):
        return self.properties.get("color", None)

    @color.setter #setter
    def color(self, c):
        self.properties["color"] = c

    @color.deleter #del
    def color(self):
        del self.properties["color"]

你所做的只是将函数(getter,setter,del)作为参数传递给@property

如果你写了你的主文件就像是

if __name__ == "__main__": main()  
    donald = Duck() //creating object
    donald.color = "blue" //call the setter method, look its more intuitive!!  (you don't using the donald.color("blue") syntax)
    print(donald.color)//getter

我们也可以拥有自己的装饰,我强烈建议您阅读建议的链接,了解其各种用途和优势