如何在循环内定义 Python 函数并使用 *args 和 **kwargs
How to define Python functions inside a loop and use *args and **kwargs
我正在尝试在调用实例方法时打印一条消息,如下所示。我 运行 变成了 this problem,但在我的案例中我无法解决它,因为所有解决方案似乎都需要传递我无法在此处执行的特定参数。
class MathLab:
def add(self, a, b):
print(a + b)
def mult(self, a, b):
print(a * b)
m = MathLab()
for method in [m.add, m.mult]:
def tracked_method(*args, **kwargs):
print("Running: " + method.__name__)
method(*args, **kwargs)
m.__setattr__(method.__name__, tracked_method)
m.add(5, 5)
输出
Running: mult
25
这有帮助吗?添加具有默认值的关键字参数,以便对 method
进行早期绑定(然后使用该关键字参数 _method
代替函数内的 method
)。
为方便起见显示了整个代码,但与问题中的代码唯一不同的部分是 tracked_method
函数本身。
class MathLab:
def add(self, a, b):
print(a + b)
def mult(self, a, b):
print(a * b)
m = MathLab()
for method in [m.add, m.mult]:
def tracked_method(*args, _method=method, **kwargs):
print("Running: " + _method.__name__)
_method(*args, **kwargs)
m.__setattr__(method.__name__, tracked_method)
m.add(5, 5)
给出:
Running: add
10
顺便说一句,您可以简单地使用 setattr(m, ...)
.
而不是使用 m.__setattr__(...)
我正在尝试在调用实例方法时打印一条消息,如下所示。我 运行 变成了 this problem,但在我的案例中我无法解决它,因为所有解决方案似乎都需要传递我无法在此处执行的特定参数。
class MathLab:
def add(self, a, b):
print(a + b)
def mult(self, a, b):
print(a * b)
m = MathLab()
for method in [m.add, m.mult]:
def tracked_method(*args, **kwargs):
print("Running: " + method.__name__)
method(*args, **kwargs)
m.__setattr__(method.__name__, tracked_method)
m.add(5, 5)
输出
Running: mult
25
这有帮助吗?添加具有默认值的关键字参数,以便对 method
进行早期绑定(然后使用该关键字参数 _method
代替函数内的 method
)。
为方便起见显示了整个代码,但与问题中的代码唯一不同的部分是 tracked_method
函数本身。
class MathLab:
def add(self, a, b):
print(a + b)
def mult(self, a, b):
print(a * b)
m = MathLab()
for method in [m.add, m.mult]:
def tracked_method(*args, _method=method, **kwargs):
print("Running: " + _method.__name__)
_method(*args, **kwargs)
m.__setattr__(method.__name__, tracked_method)
m.add(5, 5)
给出:
Running: add
10
顺便说一句,您可以简单地使用 setattr(m, ...)
.
m.__setattr__(...)