Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用装饰器和通过继承扩展子类之间有什么区别?_Python_Decorator - Fatal编程技术网

Python 使用装饰器和通过继承扩展子类之间有什么区别?

Python 使用装饰器和通过继承扩展子类之间有什么区别?,python,decorator,Python,Decorator,我试图用python来包装装饰器,但不明白为什么我们不能通过使用子类来实现同样的事情?你可以使用子类来实现同样的事情,事实上你甚至不需要子类——你也可以通过在另一个方法中包装一个方法并重新分配它来实现同样的事情。关于是否应该将decorator语法添加到语言中有很多讨论,因为它不允许您做任何新的事情,并且需要程序员学习更多的新东西 语法doos是将许多人已经在使用的模式形式化,并使其成为标准语法,该语法有一个名称和如何使用的指南。您不必使用decorator—您可以通过其他方式实现相同的效果—但

我试图用python来包装装饰器,但不明白为什么我们不能通过使用子类来实现同样的事情?

你可以使用子类来实现同样的事情,事实上你甚至不需要子类——你也可以通过在另一个方法中包装一个方法并重新分配它来实现同样的事情。关于是否应该将decorator语法添加到语言中有很多讨论,因为它不允许您做任何新的事情,并且需要程序员学习更多的新东西

语法doos是将许多人已经在使用的模式形式化,并使其成为标准语法,该语法有一个名称和如何使用的指南。您不必使用decorator—您可以通过其他方式实现相同的效果—但使用官方支持的标准方法和简洁易读的语法会使生活变得更轻松

  • 您知道,在定义前面加上
    @spam class | def name
    只意味着“定义此处所写的名称,然后将
    name
    绑定到
    spam(name)

  • 装饰器通常应用于函数而不是类。当然,您可以创建一个可调用的类和子类。。。您还可以实现自己的整数类型。两者都不可行

  • 在相当多的情况下,您可能会通过子类化。。。除了装饰器只定义一次,并且可以应用于多个类,而不是在每种情况下自己编写一个新的子类。解决这一问题的每一个方法最终都不可避免地等同于或非常类似于装饰师


  • 正如robert在评论中指出的,如果你有一个例子,答案可能会更具体…

    你有一个例子吗?我当然希望OP知道
    @spam\nclass Ham{…}
    =
    class Ham{…};Ham=spam(Ham)
    并询问为什么使用此模式而不是使用子类。