如果启动类,则引发错误,但在启动其子类时不会引发错误

时间:2014-04-06 20:59:44

标签: python

我实现了我认为类似于Python中的抽象类的东西。这是一个例子:

In [12]: class A(object):
   ....:     def __init__(self, b):
   ....:         self.b = b
   ....:         raise RuntimeError('Cannot create instance of this class')
   ....:

In [13]: class B(A):
   ....:     pass
   ....:

In [14]: c=B(2)

我想从这个例子中得到的是能够启动B子类,调用c.b并检索2.如果我要调用A类,它会给我RuntimeError。这个实现的问题是它也会引起B上的错误。我怎么能绕过这个?

正如一些评论所述,一个解决方案是将self.b = b部分放在子类中并覆盖__init__函数。如果可能的话,我宁愿将代码保留在超类中,因为这将在相当多的子类中重复。

感谢。

2 个答案:

答案 0 :(得分:1)

import abc

class A(object):
    __metaclass__ = abc.ABCMeta
    @abc.abstractmethod
    def __init__(self, b):
        pass

class B(A):
    def __init__(self, b):
        self.b = b

c = A(2)

答案 1 :(得分:1)

这有什么问题:

class A(object):
    def __init__(self, b):
        self.b = b
        if type(self) == A:
            raise NotImplementedError('Cannot create instance of this class')

class B(A):
    pass

B(2) # doesn't raise
A(2) # raises