【发布时间】:2021-10-04 15:42:11
【问题描述】:
我正在尝试编写一个装饰器,可用于在继承期间覆盖方法,但在外部。 比如:
class A:
def some_method(self):
print('does stuff')
def override(method):
# override decorator
....
def some_method_override():
print('does other stuff')
@override(method, some_method_override)
class B:
#overridden
a = A()
b = B()
a.some_method() # prints 'does stuff'
b.some_method() # prints 'does other stuff'
如果有人能就此分享一些想法,那就太好了!
【问题讨论】:
-
为什么?这似乎是一件很奇怪的事情,没有真正的好处和一些奇怪的警告(比如打破单参数
super)。 -
@user2357112supportsMonica 可能有许多类继承自 A 并以相同的方式覆盖特定方法,但会更改其他方法 - 这样您就可以重用方法
-
如果您尝试动态覆盖方法,我会查看模拟库。这是一个资源 - docs.python.org/3/library/unittest.mock.html
-
(哎呀,这意味着在我之前的评论中打破了 0-argument super - 单参数 super 是一个奇怪的历史文物,几乎对任何事情都没有用处)
标签: python oop inheritance overriding decorator