如果我有:
class A():
def f(self):
print("running function, f from class A")
class B(A):
def __init__(self):
A.__init__(self)
def f(self):
print("running function, f from class B")
我创建了一个B类实例并在其上调用f,我们都知道我们会看到关于“来自B类”的消息。但有没有办法让我检查我的对象并确保我的子类覆盖了我的方法?类似的东西:
obj = B()
assert(not obj.f.livesIn(A))
答案 0 :(得分:3)
class A():
def f(self):
print("running function, f from class A")
class B(A):
def f(self):
print("running function, f from class B")
class C(A):
pass
这表明B.f
不等于A.f
。因此B
必须覆盖f
:
obj = B()
print(obj.__class__.f == A.f)
# False
这表明C.f
等于A.f
。因此,C
不得覆盖f
:
obj = C()
print(obj.__class__.f == A.f)
# True
答案 1 :(得分:1)
如果要强制子类覆盖,可以raise NotImplementedError()
。
也可以进行检查......我看到unutbu刚发布了一个例子,所以我不再重复了。 :)