DCI en Python

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.

Utiliser le package Roles

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)

Comment utiliser

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.

Autre

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.

Informations de référence

J'ai beaucoup évoqué les pages suivantes.

Recommended Posts

DCI en Python
Quadtree en Python --2
Python en optimisation
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Liste triée en Python
AtCoder # 36 quotidien avec Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 18 en Python
Motif singleton en Python
Opérations sur les fichiers en Python
Séquence de touches en Python
Daily AtCoder # 33 en Python
Distribution logistique en Python
AtCoder # 7 tous les jours avec Python
Décomposition LU en Python
Une doublure en Python
AtCoder # 24 tous les jours avec Python
classe de cas en python
Implémentation RNN en python
AtCoder # 8 tous les jours avec Python
Traitement de fichiers en Python