Frage

fand ich eine Menge Links auf metaclasses, und die meisten von ihnen erwähnen, dass sie für die Umsetzung Fabrikmethoden nützlich sind. Können Sie mir ein Beispiel metaclasses der Verwendung des Design-Muster zu implementieren?

War es hilfreich?

Lösung

Ich würde gerne Leute Kommentare auf das hören, aber ich denke, dies ist ein Beispiel dafür, was Sie tun mögen,

class FactoryMetaclassObject(type):
    def __init__(cls, name, bases, attrs):
        """__init__ will happen when the metaclass is constructed: 
        the class object itself (not the instance of the class)"""
        pass

    def __call__(*args, **kw):
        """
        __call__ will happen when an instance of the class (NOT metaclass)
        is instantiated. For example, We can add instance methods here and they will
        be added to the instance of our class and NOT as a class method
        (aka: a method applied to our instance of object).

        Or, if this metaclass is used as a factory, we can return a whole different
        classes' instance

        """
        return "hello world!"

class FactorWorker(object):
  __metaclass__ = FactoryMetaclassObject

f = FactorWorker()
print f.__class__

Das Ergebnis werden Sie sehen, ist: type 'str'

Andere Tipps

Sie können einige hilfreiche Beispiele unter wikibooks / python , hier und hier

Es gibt keine Notwendigkeit. Sie können eine __new__() Methode um Rückkehr der Klasse überschreiben ein ganz anderer Objekttyp.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top