【发布时间】:2011-01-20 12:27:34
【问题描述】:
在asking a question about reflection我问:
很好的答案。但是说
myobject.foo()和x = getattr(myobject, "foo"); x();是有区别的。哪怕只是化妆品。首先, foo() 是静态编译的。在第二种情况下,可以通过多种方式生成字符串。 – 乔 1 小时前
得到了答案:
呃,土豆/马铃薯......在python中,niether是静态编译的,所以它们或多或少是等价的。 – SWeko 1 小时前
我知道 Python 对象的成员存储在字典中并且一切都是动态的,但我假设给定以下代码:
class Thing():
def m(self):
pass
t = Thing()
以下代码会在生成 .pyc 时以某种方式静态编译:
t.m()
即编译器知道m()的地址,所以在运行时没有点绑定。那个或运行时会缓存后续的查找。
而这总是涉及到查字典:
meth = getattr(t, "m")
meth()
是否所有调用都被视为字典中的字符串查找?还是这两个例子实际上是相同的?
【问题讨论】:
标签: python binding cpython dynamic-binding