如何在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 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用自己的装饰器。但这是一个技巧,仅适用于您控制实现的类。

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看