如何在python的子类中检测方法重载?
发布于 2021-01-29 17:13:50
我有一个班级比许多其他班级都超。我想知道(在我的超类的 init ()中,如果子类重写了特定的方法。
我尝试使用类方法来完成此操作,但是结果是错误的:
class Super:
def __init__(self):
if self.method == Super.method:
print 'same'
else:
print 'different'
@classmethod
def method(cls):
pass
class Sub1(Super):
def method(self):
print 'hi'
class Sub2(Super):
pass
Super() # should be same
Sub1() # should be different
Sub2() # should be same
>>> same
>>> different
>>> different
超类有什么方法可以知道子类是否重写了方法?
关注者
0
被浏览
49
1 个回答
-
您可以使用自己的装饰器。但这是一个技巧,仅适用于您控制实现的类。
def override(method): method.is_overridden = True return method class Super: def __init__(self): if hasattr(self.method, 'is_overridden'): print 'different' else: print 'same' @classmethod def method(cls): pass class Sub1(Super): @override def method(self): print 'hi' class Sub2(Super): pass Super() # should be same Sub1() # should be different Sub2() # should be same >>> same >>> different >>> same