У меня есть базовый класс, из которого я получаю несколько подклассов.
Каждый подкласс определяет константы класса, и я хочу применить к ним определенные ограничения.
Например:
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
Но мне не нравится тот факт, что мне нужно украшать каждый подкласс (у меня их много). Мне интересно, может ли это быть сделано с помощью некоторых манипуляций с базовым классом напрямую.
Любой совет?