私は役に立つ情報をたくさんお伝えしました。http://www.phyast.pitt.edu/~micheles/python/metatype.htmlメタクラスの競合に陥ることなく、抽象クラスを実装するシングルトンクラスを作成するにはどうすればよいですか?
しかし、私はまだ答えを見つけられなかったと思います。したがって、新しい質問です。
私は社内で使用するための関数/クラスのライブラリを作成しています。その一環として、シングルトンクラスを作成したいと考えています。それ以外のクラスは継承してシングルトンになります。これらのクラスはサブクラスラブルでなければなりません。
PERはSO Creating a singleton in Pythonに投稿し、私が実装さ:
class _Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(
_Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class Singleton(_Singleton('SingletonMeta', (object,), {})):
pass
それは動作します。サブクラス化できるシングルトンクラスを作成するのに役立ちます。
私のライブラリには、abcを使った抽象クラスを実装するいくつかのクラスがあります。そのようなクラスまたはこの抽象クラスを実装するクラスは、おそらくSingletonである可能性があります。
ので、
import abc
class Foo(metaclass=abc.ABCMeta):
@abc.abstractmethod
def bar(self): pass
class Bar(Singleton, Foo): # This generates the meta-class conflict
def bar(self):
return 'implemented'
def bat(self):
return 'something else'
私はこのようなシナリオの実装を支援するための入力/助けを探しています。
**
概要要件:
**
- シングルトンクラスを作成するためのメカニズム。
- として実装されたクラスシングルトン(上記のメカニズムによる)は、サブクラスラブルである必要があります。サブクラス クラスmyには、基本クラスよりも新しい/新しいメソッドがあります。
- 抽象クラスを作成するメカニズムです(abcはこれに役立ちます)。
- シングルトンとして動作するこの抽象クラスの実装です。
には、抽象クラスそのもの以外の追加のメソッドがある場合があります。
すべての入力/ヘルプ/ポインターに感謝します。
よろしく
シャラド
要件が矛盾していると思われる場合は、その理由を考えてください。それは高く評価されます。 – Sharad