我創建的每個業務規則都放在名爲「rule_definitions」的文件夾中。Python OOP從父類導入子類
我有一個類Rule
。它充當所有這些創建的規則的模板,它們可以繼承必要的通用函數。
的文件夾內容的一個例子:
rule_definitions/
discard.py
saveValue.py
storeValue.py
writeToOutput.py
但是,如果你想創建一個規則的實例,它只是做的很乾淨:
rule = Rule('discard')
並有Rule
類做進口本身,而不是每次需要加載規則時都找到適當的規則模塊。
例如,rule_definitions.py
內容可能是:
from Rule import Rule
class _discard(Rule):
...
並在Rule
,我們可能有:
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
這是最乾淨的方式是什麼?我不確定這是否是標準做法。
是的,爲了清晰起見,我希望每個規則的類型都是'Rule',而不是'_discard'。但是關於使用另一個類來實現泛型功能的第一個解決方案的問題,這將如何工作?假設我有'RuleTemplate'類,其中'_discard'和所有其他創建的規則繼承自。如果我創建了一個規則,例如:'r = Rule('discard')' - 我不能執行像'Rule.execute(args)'或'Rule.getName()'這樣的通用函數。 – X33
@ X33我添加了一個樣本。您可以將所有未知屬性轉發給實際實現。儘管你的類具有通用規則特徵,但並不需要公開。 – viraptor
好的,我現在明白了。我非常感謝澄清。這可能是針對我的情況的最佳方法。如果你有時間,我還有一個最後的問題:關於工廠方法,這個解決方案與工廠不是很相似嗎? – X33