python用实例方法覆盖classmethod

时间:2012-02-14 17:43:02

标签: 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
编辑:目前没有具体案例,但如果可以假设,我正在徘徊。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以使用另一个类方法覆盖该类方法,该方法将该类的实例作为参数。在该方法中,执行您需要执行的操作然后将其返回。这样你可以做到

instance = Child.do_something(instance)

但是,我不建议这样做。