タグ付けされた質問 「metaclass」


22
Pythonでのシングルトンの作成
この質問は、シングルトンデザインパターンが望ましいかどうか、アンチパターンであるかどうか、または宗教戦争の場合ではなく、このパターンがPythonで最もPython的に実装される方法について議論するためのものです。この場合、私は「ほとんどのpythonic」を「最小の驚きの原則」に従うことを定義します。 シングルトンになる複数のクラスがあります(私のユースケースはロガー用ですが、これは重要ではありません)。単に継承したり装飾したりできるときに、追加されたガンフを使用していくつかのクラスを散らかしたくありません。 最良の方法: 方法1:デコレーター def singleton(class_): instances = {} def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] return getinstance @singleton class MyClass(BaseClass): pass 長所 デコレータは、多くの場合、複数の継承よりも直感的な方法で追加されます。 短所 MyClass()を使用して作成されたオブジェクトは真のシングルトンオブジェクトですが、MyClass自体はクラスではなく関数なので、そこからクラスメソッドを呼び出すことはできません。またためm = MyClass(); n = MyClass(); o = type(n)();、その後m == n && m != o && n != …


6
DjangoのMetaクラスはどのように機能しますか?
私はDjangoを使用しています。Djangoを使用すると、クラスにパラメータを追加できますclass Meta。 class FooModel(models.Model): ... class Meta: ... 私がPythonのドキュメントで見つけた唯一のものは: class FooMetaClass(type): ... class FooClass: __metaclass__ = FooMetaClass しかし、これは同じことだとは思いません。
189 python  django  metaclass 

19
メタクラスの(具体的な)ユースケースは何ですか?
私にはメタクラスを使用するのが好きな友人がいて、定期的にそれらをソリューションとして提供しています。 メタクラスを使用する必要はほとんどないということを心に留めています。どうして?私があなたがクラスに対してそのようなことをしているなら、あなたはおそらくそれをオブジェクトに対して行うべきであると考えているので。そして、小さなリデザイン/リファクタリングが必要です。 メタクラスを使用できるようになったことで、多くの場所で多くの人々がクラスをある種の2番目のレートのオブジェクトとして使用するようになりました。プログラミングはメタプログラミングに置き換えられますか?残念ながら、クラスデコレータの追加により、さらに受け入れやすくなっています。 ですから、Pythonでのメタクラスの有効な(具体的な)ユースケースを知りたいのです。あるいは、クラスの変更がオブジェクトの変更よりも優れている理由について啓発されることもあります。 始めます: サードパーティのライブラリを使用する場合、クラスを特定の方法で変更できると便利な場合があります。 (これは私が考えることができる唯一のケースであり、具体的ではありません)
118 python  metaclass 

4
`classmethod`とメタクラスメソッドの違いは何ですか?
Pythonでは、@classmethodデコレータを使用してクラスメソッドを作成できます。 >>> class C: ... @classmethod ... def f(cls): ... print(f'f called with cls={cls}') ... >>> C.f() f called with cls=<class '__main__.C'> あるいは、メタクラスで通常の(インスタンス)メソッドを使用できます。 >>> class M(type): ... def f(cls): ... print(f'f called with cls={cls}') ... >>> class C(metaclass=M): ... pass ... >>> C.f() f called with cls=<class '__main__.C'> の出力に示されているようにC.f()、これら2つのアプローチは同様の機能を提供します。 @classmethodメタクラスでの通常のメソッドの使用と使用の違いは何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.