2012-01-21 13 views
6

は、私はクラスメソッドの束を持っている親クラスを持っている「と」親クラスの各メソッドをラップするためにクリーンな方法のメソッドの "with"。この効果を達成する必要があります:のpython:私のサブクラスで</p> <pre><code>class Parent(): @classmethod def methodA(cls): pass @classmethod def methodB(cls): pass </code></pre> <p>、私はサブセットをラップしたいと思います:

class Child(Parent): 

    @classmethod 
    def methodA(cls): 
     with db.transaction: 
      super(Child, cls).methodA() 

私はこのパターンに従う方法がたくさんあり、自分自身を繰り返さないことを望みます。これを行うためのよりクリーンな方法がありますか?

答えて

3

db.transactionをbaseに移動する必要があるようです。 /必要に応じてよう

@staticmethod 
def gettransaction(): return db.transaction 

は、あなたが子供たちにそれをオーバーロードdb.transactionを返し、ベースにする方法を確認します。あなたはその後、

def methodB(cls): 
    with cls.gettransaction(): 
     bla ... 

はここで、これは

enter 
A 
exit 
enter2 
A 
exit2 
+0

@jsbuenoになり

class transact: def __enter__(a): print "enter" def __exit__(a,b,c,d): print "exit" class transact2: def __enter__(a): print "enter2" def __exit__(a,b,c,d): print "exit2" class Parent(): @staticmethod def gettrans(): return transact() def methodA(cl): with cl.gettrans(): print "A" class Child(Parent): pass @staticmethod def gettrans(): return transact2() p=Parent() p.methodA() c=Child() c.methodA() 

の@ staticmethodを追加するためのおかげでダミートランザクションを完全実施例だんベースで

。 –

関連する問題

 関連する問題