Python元类与类装饰器

gpilotino:

Python元类和类装饰器之间的主要区别是什么?有什么我可以做的但不能解决的吗?

Alex Martelli:

装饰器要简单得多,也要受限制得多,因此,只要可以用元类或类装饰器实现所需的效果,就应该首选装饰器。

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

您可以在自定义元类中执行许多操作,但不能在装饰器中执行许多操作(当然,除非装饰器在内部生成并应用自定义元类-但这是作弊行为;-)...甚至在Python 3中,是您只能使用自定义元类而不是事后做的事情……但这是您问题的高级子领域,因此让我举一些简单的例子)。

例如,假设你想使一个类的对象X,使得print X(或在Python 3 print(X)当然;-)显示peekaboo!如果没有自定义元类,您将无法做到这一点,因为在__str__这里,元类的替代是至关重要的角色,即,您需要def __str__(cls): return "peekaboo!"在class的自定义元类中添加一个X

这适用于所有魔术方法,即适用于类对象本身的各种操作(与之相反,适用于其实例的操作则使用类中定义的魔术方法-对类对象本身的操作使用元类中定义的魔术方法)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章