【发布时间】:2020-07-21 00:17:31
【问题描述】:
我们的目标是将 Python 元类的功能与其他语言的元编程系统进行比较,例如 Groovy、Xtend、Nemerle、CLOS、OpenJava、BSJ (BackStage Java)、Iguana/J、Scala、Cyan 的编译器插件等。
假设类 MyMeta 是类 MyClass 的元类。
MyMeta 能否在 MyClass 中生成拦截获取和设置 MyClass 实例属性的代码?
MyClass被继承时是否可以调用MyMeta的方法,即使子类元类不是MyMeta?
在子类中重写 MyClass 方法时是否可以调用 MyMeta 的方法,即使子类元类不是 MyMeta?
MyClass的方法使用未声明的属性时,是否可以调用MyMeta的方法?
MyMeta 能否处理 MyClass 的 AST 或其他等效表示? 例如,MyMeta 是否可以检查每个类方法是否最多有 20 条语句?或者在第二个方法语句之后添加一个语句?或者重命名一个方法?
【问题讨论】:
标签: python reflection metaprogramming metaclass