0

我有一个这样的模型

class User(model):
    username = XXX
    addr1 = xxx

def get_username(self):
    return self.username + 'some message'

def get_addr1(self):
    return self.addr1 + 'some string'

和代码我想遍历每个对象,如果存在带有 get_+field.name 的函数,则调用该方法,否则返回字段本身。

有没有办法做到这一点?下面是伪代码:

for field in each_obj._fields.itervalues():
    if get_+fieldname exists then:
        return that function call
    else:
        return self.field.name
4

3 回答 3

0

看看我如何在这里伪造 python 属性http://ilian.ini.org/faking-attributes-in-python-classes/并在评论中检查替代解决方案。

于 2012-04-10T08:21:51.973 回答
0

您可以调用hasattr(obj, 'get_'+fieldname)以了解该方法是否存在,但最好的方法是__getattr__在您的类中实际覆盖,然后让 Python 完成剩下的工作。

于 2012-04-10T07:31:21.920 回答
0
for var in obj.__dict__:
    try:
        print getattr(obj, 'get_%s' %var)()
    except(AttributeError):
        print var
于 2012-04-10T08:47:59.277 回答