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

你能解释一下Python中的装饰器是什么吗?,python,python-3.x,decorator,python-decorators,Python,Python 3.x,Decorator,Python Decorators,我正在学习Python OOP,我谈到了decorators的主题,但我所用的材料并没有深入讨论它。 我发布了示例代码: class Duck: def __init__(self, **kwargs): self.properties = kwargs def quack(self): print("Quaaack!") def walk(self): print("Walk like a duck.") d

我正在学习Python OOP,我谈到了decorators的主题,但我所用的材料并没有深入讨论它。 我发布了示例代码:

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()
你能帮我了解一下装饰师的重要性吗?
你能用简单的语言解释一下decorator的概念吗?

让我写一些关于上述代码的简单内容

一般说来,装饰师是

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

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

在上面的代码中,您正在设置、获取、删除一个属性/一个颜色鸭子的属性

装饰器总是以“@”开头@属性是一个预定义的decorator函数,用于获取类的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"]
您所做的就是将functionsgetter、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

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

互联网上有许多关于装饰师的文章。例如,我只是需要有人用简单的语言解释什么是装饰师。不仅仅是注释代码。我不明白为什么有人否决了这个问题。我看了一个可能重复的问题,但在这些答案中没有人解释装饰师是什么,所以我的问题实际上是唯一的。在这里检查第二个答案-我同意,虽然基本上是基本的,但这个问题没有直接的重复-至少没有一个在简单的搜索中出现