python用实例方法覆盖类方法

pro*_*ach 5 python inheritance

我在代码中遇到一个错误,该错误隐藏了重写方法,因为我忘记了@classmethod装饰器。我在徘徊是否可以强制采用另一种方式(注意这可能是不良的设计),但类似于:

 class Super:

   @classmethod
   def do_something(cls):
     ...

class Child:
  def do_something(self):
    ...

obj = Child()
obj.do_something() #calls the child
Child.do_something() #calls the Super method
Run Code Online (Sandbox Code Playgroud)

编辑:目前尚无具体案例,但我正在徘徊,如果可以假设可以做到。

Rik*_*ggi 3

作为一个纯粹的假设应用程序,这可能是一种方式:

class Super:
   @classmethod
   def do_something(cls):
     print('Super doing something')

class Child(Super):
    def __init__(self):
        self.do_something = lambda: print('Child Doing Something')
Run Code Online (Sandbox Code Playgroud)

例子:

>>> obj = Child()
>>> obj.do_something()
Child Doing Something
>>> Child.do_something()
Super doing something
>>> obj.do_something()
Child Doing Something
Run Code Online (Sandbox Code Playgroud)