Lors de l'utilisation du modèle de référentiel DDD et de la carte de contexte, je voulais donner un comportement dynamique à l'instance.J'ai donc étudié comment réaliser DCI (Data Context Interaction) en Python.
DCI en Python Package Python DCI qui semble être né d'un thread
C'est plutôt vieux et impopulaire, mais c'est bien fait.
class Person(object):
def __init__(self, name):
self.name = name
from roles import RoleType
class Carpenter(object):
__metaclass__ = RoleType
def chop(self):
return "chop, chop"
Si vous définissez Personne, Carpenter comme
>>> person = Person("John")
>>> Carpenter(person)
<Person+Carpenter object at 0x...>
Vous pouvez donner le comportement Carpenter à l'instance Person.
Dynamic Mixin
Implémentation d'une fonction qui ajoute dynamiquement des attributs de la classe Mixin à une instance.
import types
def mixin(instance, mixin_class):
"""Dynamic mixin of methods into instance - works only for new style classes"""
for name in mixin_class.__dict__:
if name.startswith('__') and name.endswith('__') \
or not type(mixin_class.__dict__[name])==types.FunctionType:
continue
instance.__dict__[name]=mixin_class.__dict__[name].__get__(instance)
class Person(object):
def __init__(self, name):
self.name = name
class CarpenterMixin(object):
def chop(self):
return "chop, chop"
Tel que défini comme
>>> person = Person("John")
>>> mixin(person, CarpenterMixin)
>>> person.chop()
'chop, chop'
C'est relativement simple. Dynamic Mixin (2)
Une manière agressive de réécrire dynamiquement l'arbre d'héritage d'une classe d'instance. L'explication est omise. Veuillez consulter le lien.
Je pense qu'il est possible de renoncer à donner un comportement à l'instance elle-même et de le réaliser avec la délégation.
J'ai beaucoup évoqué les pages suivantes.
Recommended Posts