gpt4 book ai didi

python - python oop中的委托(delegate)

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:30 25 4
gpt4 key购买 nike

我不明白在以下代码中需要额外的“委托(delegate)”层,来自 Mark Lutz 的 Learning Python,第 5 版:

class Super:
def method(self):
print('in Super.method')
def delegate(self):
self.action()

class Provider(Super):
def action(self):
print('in Provider.action')

这意味着您必须在子类中指定 action-method 才能使 delegate-method-call 起作用。

Super().delegate() ====> Error!
Provider().delegate() ====> Works, prints 'in Provider.action'!

为什么不在子类中编写委托(delegate)方法?换句话说,完全从 Super 中删除委托(delegate),只在 Provider 中编写代码。结果仍然是来自 Super.delegate() 的错误和来自 Provider.delegate() 的结果。

您能否提供用例或引用/指针?谢谢!

最佳答案

无法真正回答 Mark Lutz,但我可以解释为什么我认为这是个好主意。它类似于 making virtual functions nonpublic 的 C++ 指南.

想法如下:当基类提供一个可以被覆盖的公共(public)接口(interface)时,就没有任何东西必须流经的单一接口(interface)点。您是否希望稍后记录一些内容、验证参数等?如果你不这样做,你就做不到。

所以在这里,在 Python 中,它是这个规则的模拟:

class Super:
def delegate(self):
# -> Single interface point; log, verify, time, whatever <-
self.action() # <- This varies on the subclass.

如您所见,这个习惯用法允许子类改变某些方面,同时强制其他方面保持一致。恕我直言,这是个好主意。

关于python - python oop中的委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30682761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com