Python用实例方法覆盖类方法

6 投票
2 回答
5198 浏览
提问于 2025-04-17 13:01

我在代码中遇到了一个问题,就是一个重写的方法被隐藏了,因为我忘记加@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

补充:现在没有具体的例子,只是在想理论上是否可以做到。

相关问题:

2 个回答

1

你可以用另一个类的方法来覆盖这个类的方法,这个新方法需要一个该类的实例作为参数。在这个方法里,你可以对这个实例进行你想做的操作,然后把它返回。这样你就可以这样做:

instance = Child.do_something(instance)

不过,我并不推荐这样做。

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')

举个例子:

>>> obj = Child()
>>> obj.do_something()
Child Doing Something
>>> Child.do_something()
Super doing something
>>> obj.do_something()
Child Doing Something

撰写回答