如果我想从一个函数到另一个函数传递一个参数列表,我可以使用locals函数。但是,如果我在一个实例方法中,这就失败了,因为self不能作为kwarg传递。我可以创建一个本地字典,然后删除self。不过,我在想,如果我能做的更多,我会觉得很优雅。在
class MyObj:
def test(self, a=1, b=2, c=3, d=4):
return [a,b,c,d]
class MyVerboseObj(MyObj):
def test(self, a=1, b=2, c=3, d=4):
print "RUNNING TEST a=%d"%a
kwargs = locals()
del kwargs["self"]
return MyObj.test(self, **kwargs)
MyVerboseObj().test()
有没有更好的方法来传递相同的列表参数MyVerboseObj.测试到我做的测试?在
**更新**
这是一个简单的例子来说明我的问题。一个更实际的例子可能是:
^{pr2}$我有很多show对象,它们具有不同的变量,由不同的模块和不同的命名约定定义——我正试图创建具有通用功能的show对象。在
如果您不想重写父函数(因为您想使用它),只需通过给它一个不同的名称来避免重写它!在
使用
locals()
很少是个好主意。这种方法很混乱,很容易对代码进行修改,因为添加任何局部变量都会扰乱调用。在我会更明确地说:
我知道这很乏味,但它避免了一些麻烦。而且效率更高。在
或者,如果您不介意丢失签名,您可以接受
^{pr2}$*args, **kwargs
作为重写函数的参数:在这个版本中访问
a
会有点麻烦,但是由于您对第二个示例中的参数不太感兴趣,所以这可能是更简单的解决方案。在附带说明:随着继承结构变得更加复杂(即多重继承),您可能需要开始使用super()方法:
相关问题 更多 >
编程相关推荐