class Foo(object):
def tick(self):
print("something")
class Bar(object):
def __init__(self):
self.foo = Foo()
def tick(self):
#Here what I do....
self.foo.tick()
#here what my goal would be
self.foo()
b = Bar()
b.tick()
Это по сути моя цель. Из того, что я собрал, я мог бы изменить функцию тика на __call__
, и это позволило бы мне делать то, что я хотел. Несколько других ответов сказали, что это сделает новый экземпляр объекта, означает ли это, что он будет использовать память self.foo? или он сделает совершенно новый объект, вновь созданный? или сделать копию self.foo?
Также приходит на ум пара недостатков, которые могут проявляться или не проявляться. Для определенной части моей программы я проверяю, есть ли у объекта __call__
, чтобы определить, является ли аргумент, который я передаю, функцией или переменной, и я действительно не думаю, что я хотел бы разрешить это (хотя, я полагаю, класс технически был бы функцией в этой точке.) Есть ли способ различать функцию и вызываемый класс?
Есть ли что-нибудь еще, что сделало бы это нежелательным (и это питонический способ работать?)? Моя следующая мысль заключалась в том, что, учитывая, что другая переменная с префиксом __
не может использоваться вне их класса, но это, похоже, не так.