Jede Geschäftsregel, die ich erstelle, wird in einen Ordner namens "rule_definitions" gestellt.Python OOP importiert untergeordnete Klasse von der übergeordneten Klasse
Ich habe eine Klasse Rule
. Es fungiert als Vorlage für all diese erstellten Regeln, von denen sie die notwendigen generischen Funktionen übernehmen können.
Ein Beispiel für den Inhalt des Ordners:
rule_definitions/
discard.py
saveValue.py
storeValue.py
writeToOutput.py
Aber wenn Sie eine Instanz einer Regel erstellen möchten, es ist sehr sauber, nur tun:
rule = Rule('discard')
und haben die Rule
Klasse den Import tun selbst, anstatt jedes Mal das passende Regelmodul zu finden, wenn Sie eine Regel laden müssen.
Zum Beispiel könnte der Gehalt an rule_definitions.py
sein:
from Rule import Rule
class _discard(Rule):
...
Und innerhalb Rule
, könnten wir haben:
import importlib
class Rule():
"""A template class that all rules inherit from and are instantiated from."""
def __init__(self, rule):
# load the rule by name from rule definitions
try:
self.Rule = importlib.import_module('defs._'+ rule)
except ImportError:
print 'Failed to find rule definiton while attempting to load
#other generic functions to inherit below
Ist dies der sauberste Weg? Ich bin mir nicht sicher, ob das Standardverfahren wäre.
Ja, ich möchte, dass in diesem Szenario jede Regel vom Typ 'Rule' ist, nicht' _discard'. Aber eine Frage zu Ihrer ersten Lösung, eine andere Klasse für generische Funktionalität zu verwenden, wie würde das funktionieren? Angenommen, ich habe die 'RuleTemplate' Klasse, die' _discard' und alle anderen erstellten Regeln erben. Wenn ich eine Regel erstelle, z. B .: 'r = Rule ('discard')' - Ich kann die generischen Funktionen wie 'Rule.execute (args)' oder 'Rule.getName()' nicht ausführen. – X33
@ X33 Ich habe eine Probe hinzugefügt. Sie können alle unbekannten Attribute an die tatsächliche Implementierung weiterleiten. Ihre Klasse mit generischen Regelmerkmalen muss jedoch nicht öffentlich sein. – viraptor
Okay, ich verstehe jetzt. Ich schätze die Aufklärung sehr. Dies ist wahrscheinlich der beste Ansatz für meine gegebene Situation. Wenn Sie Zeit haben, habe ich eine abschließende Frage: Ist diese Lösung in Bezug auf den Fabrikansatz nicht sehr ähnlich einer Fabrik? – X33