【问题标题】:Skip function decorator of the parent class function when called from child class从子类调用时跳过父类函数的函数装饰器
【发布时间】:2025-11-24 11:00:01
【问题描述】:

说,我有两个课程AB。当使用super 从子class B 调用test() 函数时,它应该跳过@validate 装饰器。从子类调用时,如何强制super 方法跳过父类函数的装饰器?有没有可能?

class A:

   @validate  
   def test():
      pass

Class B(A):

   @validate 
   def test():
      super(B, self).test()
      pass

【问题讨论】:

  • B中的函数test是否需要应用validate装饰器?
  • @Poolka 是的,有必要
  • 但是这些函数非常不同 - A.test 做了一些工作,而 B.test 只是调用另一个函数来完成工作。所以B.test 没有这个装饰器似乎是合理的。我想你可以将它移到B.test 中,并应用到真正需要validate 的代码中。

标签: python django python-3.x python-2.7


【解决方案1】:

可以去掉父类中的@validate注解,这样就不会被调用了

class A:

   def test():
      pass

Class B(A):

   @validate 
   def test()
      super(B, self).test()
      pass

另一种选择是使用中间方法

class A:

   @validate  
   def test():
      intermediate()

   def intermediate():
       pass


Class B(A):

   @validate 
   def test()
      super(B, self).intermediate()
      pass

【讨论】:

  • 我无法删除父函数中的@validate,因为项目的许多部分都有很多用例。