В задают вопрос об отражении Я спрашиваю:
Хороший ответ. Но есть разница между словами myobject.foo()
и x = getattr(myobject, "foo"); x();
. Даже если это только косметика. В первом foo () компилируется статически. Во втором случае строка может быть получена любым количеством способов. - Джо 1 час назад
Который получил ответ:
Эх, potato / solanum tuberosum ... в питоне niether компилируется статически, поэтому они более или менее эквивалентны. - SWeko 1 час назад
Я знаю, что члены объектов Python хранятся в словаре и что все динамично, но я предположил, что, учитывая следующий код:
class Thing():
def m(self):
pass
t = Thing()
Следующий код будет каким-то образом статически скомпилирован при генерации .pyc:
t.m()
т.е. компилятор знает адрес m()
, поэтому нет привязки точки во время выполнения. Это или время выполнения будет кешировать последующие поиски.
Принимая во внимание, что это всегда будет включать в себя словарь:
meth = getattr(t, "m")
meth()
Все ли обращения считаются поисками строк в словарях? Или два примера на самом деле идентичны?