我实现了我认为类似于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__
函数。如果可能的话,我宁愿将代码保留在超类中,因为这将在相当多的子类中重复。
感谢。
答案 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