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"的字符串,它将 打破一切。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Ejb@Schedule在elasticbeanstalk上运行的swarm应用程序中不起作用   oop在java中,接口是否可以从超级接口继承常量和方法?   来自JDBC的java PL/SQL调用导致“SQLSyntaxErrorException:ORA00900”   java在安卓中共享到应用程序时如何制作覆盖?   java Cardview是一张一卡通   从java中的类名实例化类   java无法获取HashMap中新Putte的元素?   使用iText库在PDF中生成java分层书签   java@Target属性值必须是类文本   java Spring绑定抽象对象   Java中类间的c JNI作用域   spring如何从java运行curl命令?   java如何计算死亡年龄?   swing动态JPanel加法   java生成计算机移动   java是多维数组的新成员   SpringMVCJava。lang.ClassNotFoundException:org。springframework。表示表达式分析器   java在运行时创建NinePatch