python的内部方法调度
pyta的Python项目详细描述
pyta=python+beta
灵感来源:http://www.cs.utah.edu/plt/publications/oopsla04-gff.pdf
用法
内部调度用于保证 使用辅助方法。外部调度产生最低的方法 这会调用正在调用的inner。一个inner(cls, self)调用调用 具有inner调用的次高方法,或者如果 没有更高的inner方法。super的工作原理与以前相同, 但注意不要造成无限循环。
完整示例:
from pyta import inner, BetaMetaclass class A(object): def foo(self): print "world!" class B(A): # Can inherit from regular classes # The lowest class in the hierarchy that uses `inner` needs the metaclass __metaclass__ = BetaMetaclass def foo(self): inner(B, self).foo() # Calls C.foo super(B, self).foo() # Calls A.foo class C(B): def foo(self): print "Hello, " obj = C() obj.foo() # External dispatch; calls B.foo
注意事项
因为在超类中使用inner会完全改变哪个方法 外部分派解析为(它不再是最重写的方法) 元类需要检查方法的来源并喷洒 一些魔法能让一切顺利。
为了使一切正常工作,您必须调用inner(cls, self) {EM1} $词汇“EEM>”。换句话说,如果您这样做,它将不起作用:
bar = inner bar(cls, self).foo()
或者这个:
from pyta import inner as bar bar(cls, self).foo()
目前,实现没有区分字符串和实际方法 调用,因此如果您的方法包含类似"text inner( moretext"的字符串,它将 打破一切。