J'ai trouvé beaucoup de liens sur les métaclasses, et la plupart d'entre elles mentionnent qu'elles sont utiles pour implémenter des méthodes d'usine. Pouvez-vous me montrer un exemple d'utilisation de métaclasses pour implémenter le modèle de conception?Implémentation du modèle de conception d'usine à l'aide de métaclasses en python
Répondre
J'aimerais entendre les commentaires sur ce des gens, mais je pense que ceci est un exemple de ce que vous voulez faire
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__
Le résultat que vous verrez est: tapez 'str'
Pas besoin. Vous pouvez override a class's __new__()
method afin de retourner un type d'objet complètement différent.
Je ne pense pas que vous pouvez avec des métaclasses ... (peut-être vous pouvez - si oui faites le moi savoir et j'aurai appris quelque chose :)) – RyanWilcox
Vous trouverez quelques exemples utiles à wikibooks/python, here et here
ce sont exactement les liens sur lesquels je suis tombé. Je ne pourrais pas trouver un exemple concret d'usine (bien que tous le mentionnent) dans l'un d'eux ... – olamundo
pouvez-vous ajouter un peu de "factoriness" à l'exemple, c'est-à-dire une certaine personnalisation appliquée aux objets créés? – olamundo