如果我想将一个相同的 args 列表从一个函数传递到另一个函数,我可以使用 locals 函数。但是,如果我在实例方法中,这就会失败,因为 self 不能作为 kwarg 传递。我可以创建一个本地人的字典,然后删除自己。我想知道是否有更优雅的方式来做这件事——这对我来说似乎很多。
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.test 传递给 MyObj.test?
** 更新 **
这是一个简化的例子来演示我的问题。一个更实际的例子可能是这样的:
class GenericShow:
def __init__(self, path):
self.path = path
def getRenderPath(self, extn="jpg", colspace="rgb"):
return "%s/render_%s.%s"%(self.path, colspace, extn)
def hasGenericShowHandler(self):
try:
import GenericShowHandler
return True
except: pass
class UkShow(GenericShow):
def getRenderPath(self, extn="jpg", colspace="rgb"):
if self.hasGenericShowHandler():
kwargs = locals()
kwargs.pop("self")
return GenericShow.getRenderPath(self, **kwargs)
else:
return "%s/blah/render_%s.%s"%(path, colspace, extn)
show = UkShow("/jobs/test")
show.hasGenericShowHandler()
print show.getRenderPath()
我有很多显示对象,它们具有由不同模块和不同命名约定定义的不同变量——我正在尝试创建具有通用功能的显示对象。