是什么的Python元类和类装饰之间的主要区别?有什么我可以用一个做,但不与其他?

有帮助吗?

解决方案

装饰得多,更简单和更有限的 - 。因此应优选每当所需的效果可与元类或类装饰来实现

任何你可以用一个类装饰做的,你当然可以用自定义元类做的(只申请了“装饰功能”的功能,即,一个采用一个类的对象,并对其进行修改,在使用过程中元类的__new____init__使类对象 - !)

有很多事情可以在自定义元类做,但不是在一个装饰(除非装饰内部产生并应用定制元类,当然 - 但是这是欺骗; - )......即使如此,在Python 3,有些事情你只能做一个自定义的元类,而不是在事后...那是你的问题的一个非常先进的分众,所以让我给简单的例子)。

例如,假设你想使一个类对象X使得print X(或在Python 3 print(X)当然;-)显示器peekaboo!的。你不可能做,没有一个定制元类,因为__str__元类的覆盖是关键的演员在这里,即你需要在课堂def __str__(cls): return "peekaboo!"的定制元类一X

这同样适用于所有魔术方法,即,各种操作作为应用到类对象本身(而不是,那些施加到其实例,它使用魔术方法中所定义的类 - 类对象本身使用魔术方法如在元类定义上的操作)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top