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
for var in obj.__dict__:
    try:
        print getattr(obj, 'get_%s' %var)()
    except(AttributeError):
        print var
于 2012-04-10T08:47:59.277 に答える
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 に答える