如果缺少pass-by-reference,如何在python 2中进行DRY

Sim*_*ott 1 python python-2.7

我正在尝试编写一些目前看起来像这样的Python代码:

if validator("foo", "bar"):
    self.a = accessor("foo", "bar")
if validator("xxx", "yyy"):
    self.b = accessor("xxx", "yyy")
Run Code Online (Sandbox Code Playgroud)

这都包含在类方法中,self.a和self.b是实例变量.

我想避免所有这些重复的validator()和accessor()的参数.如果python有pass-by-reference,我会做这样的事情:

def validate_and_access(self, target_ref, parm1, parm2)
    if validator(parm1, parm2):
        target_ref = accessor(parm1, parm2)
Run Code Online (Sandbox Code Playgroud)

鉴于我没有传递参考,还有另一种方法吗?我考虑使用getattr()通过名称作为字符串访问实例变量,或者甚至可能定义包含实例变量的字典,但这两者看起来都有点过分而且相当笨重.

Dai*_*arf 6

根据您的参考传递示例,您可以不做这样的事情吗?

def validate_and_access(self, target_ref, parm1, parm2)
    if validator(parm1, parm2):
        setattr(self, target_ref, accessor(parm1, parm2))
Run Code Online (Sandbox Code Playgroud)