DCI in Python

Bei Verwendung des DDD-Repository-Musters und der Kontextzuordnung wollte ich der Instanz ein dynamisches Verhalten verleihen. Daher untersuchte ich, wie DCI (Data Context Interaction) in Python realisiert werden kann.

Verwenden Sie das Rollenpaket

DCI in Python Python-DCI-Paket, das anscheinend aus einem Thread geboren wurde

Es ist ziemlich alt und unbeliebt, aber es ist gut gemacht.

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"

Wenn Sie Person definieren, gefällt Carpenter

>>> person = Person("John")
>>> Carpenter(person)
<Person+Carpenter object at 0x...>

Sie können der Person-Instanz Carpenter-Verhalten geben.

Dynamic Mixin

Implementierte eine Funktion, die einer Instanz dynamisch Attribute der Mixin-Klasse hinzufügt.

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)

Wie benutzt man

class Person(object):
    def __init__(self, name):
        self.name = name

class CarpenterMixin(object):
    def chop(self):
          return "chop, chop"

Wie definiert als

>>> person = Person("John")
>>> mixin(person, CarpenterMixin)
>>> person.chop()
    'chop, chop'

Es ist relativ einfach. Dynamic Mixin (2)

Eine aggressive Methode zum dynamischen Umschreiben des Vererbungsbaums einer Instanzklasse. Die Erklärung wird weggelassen. Bitte beachten Sie den Link.

Andere

Ich denke, es ist möglich, das Verhalten der Instanz selbst aufzugeben und es mit der Delegation zu realisieren.

Referenzinformationen

Ich habe stark auf die folgenden Seiten verwiesen.

Recommended Posts

DCI in Python
Quadtree in Python --2
Python in der Optimierung
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Sortierte Liste in Python
Täglicher AtCoder # 36 mit Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 18 in Python
Singleton-Muster in Python
Dateioperationen in Python
Tastenanschlag in Python
Täglicher AtCoder # 33 in Python
Logistische Verteilung in Python
Täglicher AtCoder # 7 in Python
LU-Zerlegung in Python
Ein Liner in Python
AtCoder # 24 jeden Tag mit Python
Fallklasse in Python
RNN-Implementierung in Python
AtCoder # 8 jeden Tag mit Python
Dateiverarbeitung in Python