2012-03-05 13 views
0

元のクラスの構造は次のようになります。Pythonでは、あるクラスの機能を複製するが、それは基本クラスを変更するクラスを作成することは可能ですか?

class PyLibMCCache(BaseMemcachedCache): 
class BaseMemcachedCache(BaseCache): 

私はそのように、BaseMemcachedCacheから派生BaseTagsMemcachedCacheと呼ばれる追加機能を持つクラスを作成しました:

class BaseTagsMemcachedCache(BaseMemcachedCache): 

は、それがどの新しいクラスを作成することは可能ですPyLibMCCache(例:同じメソッドと属性)と同じですが、BaseTagsMemcachedCacheを基本クラスとしますか?私は回避策としてMixin(BaseTagsCacheMixin)を使用していますが、もっと良い解決策があると思います。

答えて

2

あなたは同じ属性を持つ新しいタイプが、このような異なる基底クラスを作成することができます

PyLibMCTagsCache = type("PyLibMCTagsCache", 
         (BaseTagsMemcachedCache,), 
         vars(PyLibMCCache)) 

をこれは、しかし、私にはかなり複雑なようです。私はおそらくもっと簡単な設計に行くだろう。

1

あなたはmultiple inheritanceについて話していますか?はい、次のように定義することができます:

class NewBaseTagsMemcachedCache(BaseTagsMemcachedCache, PyLibMCCache): 

左から右のルールはPythonに適用されます。

+0

@ NiklasB。そして、私が与えたこのリンクは何のためだと思いますか? – freakish

+0

Heh、それは見たこともありませんでした。 –

1

Pythonクラスは複数の継承を持つことができます。それはあなたのためにするのだろうか?

+0

私はそれを今使っています、これは私がMixin(http://en.wikipedia.org/wiki/Mixin)で意味したものです。どうもありがとうございます –

+0

私はあなただと思いますすでに正しい方法で行っています。あなたは今ある問題を解決する代替手段を探していますか? – alexis

+0

( 'MemcachedCache'、' PyLibMCCache')に機能を追加したいすべてのクラスは 'BaseMemcachedCache'から派生しています。クラスが異なる数のパラメータを受け入れるのでMixinクラスの '__init__'を簡単に変更することはできませんので、ベースクラスを変更して解決策を探していました –