我implementig在this way一個複合模式:Python的複合圖案的異常處理&pylint的
1)中的 「抽象」 組分是:
class Component(object):
"""Basic Component Abstraction"""
def __init__(self, *args, **kw):
raise NotImplementedError("must be subclassed")
def status(self):
"""Base Abstract method"""
raise NotImplementedError("must be implemented")
2)葉:
class Leaf(Component):
"""Basic atomic component
"""
def __init__(self, *args, **kw):
self.dict = {}
def status(self):
"""Retrieves properties
"""
return self.dict
的問題是,產生pylint的,當然,這樣的警告:
Leaf.__init__: __init__ method from base class 'Component' is not called
但進入我的葉子,我不能要求:無例外的提高
def __init__(self, *args, **kw):
Component.__init__(self, *args, **kw)
self.dict = {}
。
我必須忽略pylint警告還是存在一些錯誤的編碼?
你的建議:「抽象初始化器是一個壞主意,你的代碼可能演變讓你想要做的根組件一些初始化。」,但我到一個組合模式,它必須有這樣的抽象。 – DrFalk3n 2009-07-07 10:04:54
@ DrFalk3n。讓我們不要迷戀該模式的Java版本。 Java人喜歡他們的抽象類。 Python根本沒有這個。我們都是大人,我們都知道抽象類是行不通的。拋出引發NotImplemented的抽象__init__確實沒問題。您不必在Python中重新提供Java/C++的愚蠢。 – 2009-07-07 10:13:42
複合模式並不意味着你不能在基類中有共同的初始化代碼。你想避免的是基類的實例化。因此,檢查與如果類型(個體經營)==部件:引發異常(「組件不能直接實例化」) – 2009-07-07 10:15:35