【发布时间】:2012-02-24 19:19:04
【问题描述】:
我有一个类是许多其他类的超类。我想知道(在我的超类的__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
有没有办法让超类知道子类是否覆盖了方法?
【问题讨论】:
-
你能说几句为什么你想这样做吗?
-
什么都不会立即出现,但是如果您在方法中包含文档字符串,那么当方法被覆盖时它们会被覆盖。因此,您应该能够使用
MyClass.methodname.__doc__对其进行跟踪。但我发现这个解决方案非常hack,这就是为什么我没有将它作为答案发布 -
基本上我想让超类将这些方法定义为“通过”,并有一个单独的方法(实际上是 init)调用这些函数。我想将 init 放入 print 语句中,说明我们正在启动或结束函数,但如果该函数仍然为空,这些语句看起来不合适,我想取消它们。
-
@Brian 为什么不让这些
print语句成为子类而不是超类方法的一部分? -
超类的部分目标是消除将这些常见项目添加到子类的需要。有一个超类和许多子类。
标签: python class overriding abstract-class