如果您确实想强制子类定义给定的属性,则可以使用元类。就我个人而言,我认为这可能是矫kill过正,不是很Python,但是您可以执行以下 *** 作:
class AbstractFoometa(type): def __call__(cls, *args, **kwargs): """Called when you call Foo(*args, **kwargs) """ obj = type.__call__(cls, *args, **kwargs) obj.check_bar() return obj class AbstractFoo(object): __metaclass__ = AbstractFoometa bar = None def check_bar(self): if self.bar is None: raise NotImplementedError('Subclasses must define bar') class GoodFoo(AbstractFoo): def __init__(self): self.bar = 3 class BadFoo(AbstractFoo): def __init__(self): pass
基本上,重新定义元类
__call__以确保
check_bar在实例的init之后被调用。
GoodFoo() # okBadFoo () # yield NotImplementedError
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)