Мне нужно хранить оба аргумента & kwargs в кортеже для вызова позже, так что в этом случае будет соответствующее значение в кортеже * args или args? Другими словами, это будет работать:Когда я использую ** kwargs vs kwargs (* args vs args)?
def __init__(self, *args, **kwargs):
self._buildCalls = [
(self.__init__, args, kwargs)
]
self._building = False
def __getattr__(self, attr):
if self.building():
if hasmethod(self, attr):
return lambda *args, **kwargs: self.argSaver(attr, *args, **kwargs)
else:
return super().__getattr__(attr)
def argSaver(self, method, *args, **kwargs):
self._buildCalls.append((method, args, kwargs))
return method(*args, **kwargs)
Вы попробовали - это сработало? – AChampion
Вы можете найти примеры в ответах [здесь] (http://stackoverflow.com/q/40498298/4014959). –
Я не уверен, что вы действительно понимаете, что делают '*' и '**'. Но да, вам нужно будет хранить 'args' и' kwargs' в кортеже; '* args' и' ** kwargs' - это не фактические вещи, которые вы могли бы сохранить (а скорее просто выполнение другого оператора на 'args' и' kwargs' соответственно). – poke