在问一个关于反射的问题时,我问:
不错的答案。
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()
是否所有调用都被视为字典中的字符串查找?还是这两个例子实际上是相同的?