我有一個基類,從中派生出多個子類。
每個子類都定義了類常量,我希望對它們實施某些限制。 例如:派生自動類裝飾(或驗證)
class Base(object):
# define these in your sub-class, and make sure (NOM % DENOM == 0)
NOMINATOR = None
DENOMINATOR = None
class Subclass_good(Base):
NOMINATOR = 6
DENOMINATOR = 3
class Subclass_bad(Base):
NOMINATOR = 7
DENOMINATOR = 5
我希望能夠強制執行規則(NOM%DENOM == 0)。
我目前做了一類裝飾:
def nom_denom_validator(cls):
assert(cls.NOMINATOR % cls.DENOMINATOR == 0)
return cls
# and decorate each subclass, e.g.:
@nom_denom_validator
class Subclass_another(Base):
NOMINATOR = 9
DENOMINATOR = 12
但我不喜歡這樣的事實,我需要裝點每個子類(我有很多)。我感興趣的是,這是否可以通過對Base類的某些操作直接完成。
有什麼建議嗎?
是的,如果你想要繼承類級別的行爲,你需要一個元類。如果你不'想要它繼承,你想要一個類裝飾器。 – Steve 2010-12-20 13:44:46