题
是什么的Python元类和类装饰之间的主要区别?有什么我可以用一个做,但不与其他?
解决方案
装饰得多,更简单和更有限的 - 。因此应优选每当所需的效果可与元类或类装饰来实现
任何你可以用一个类装饰做的,你当然可以用自定义元类做的(只申请了“装饰功能”的功能,即,一个采用一个类的对象,并对其进行修改,在使用过程中元类的__new__
或__init__
使类对象 - !)
有很多事情可以在自定义元类做,但不是在一个装饰(除非装饰内部产生并应用定制元类,当然 - 但是这是欺骗; - )......即使如此,在Python 3,有些事情你只能做一个自定义的元类,而不是在事后...那是你的问题的一个非常先进的分众,所以让我给简单的例子)。
例如,假设你想使一个类对象X
使得print X
(或在Python 3 print(X)
当然;-)显示器peekaboo!
的。你不可能做,没有一个定制元类,因为__str__
元类的覆盖是关键的演员在这里,即你需要在课堂def __str__(cls): return "peekaboo!"
的定制元类一X
。
这同样适用于所有魔术方法,即,各种操作作为应用到类对象本身(而不是,那些施加到其实例,它使用魔术方法中所定义的类 - 类对象本身使用魔术方法如在元类定义上的操作)
。不隶属于 StackOverflow