gpt4 book ai didi

oop - 什么是开放递归?

转载 作者:行者123 更新时间:2023-12-03 10:04:34 24 4
gpt4 key购买 nike

什么是开放递归?它是特定于 OOP 的吗?

(我在 this tweetDaniel Spiewak 中遇到了这个词。)

最佳答案

“开放递归”这个名称起初有点误导,因为它与通常使用的递归(一个调用自身的函数)无关;在这种程度上,没有封闭的递归。
它基本上意味着,一个事物指的是它自己。我只能猜测,但我确实认为“开放”一词来自开放,就像“开放以供扩展”一样。
从这个意义上说,一个对象对扩展是开放的,但仍然指涉它自己。
也许一个小例子可以阐明这个概念。
想象一下你写了一个像这样的 Python 类:

class SuperClass:
def method1(self):
self.method2()
def method2(self):
print(self.__class__.__name__)
如果你运行这个
s = SuperClass()
s.method1()
它将打印“父类(super class)”。
现在我们从 SuperClass 创建一个子类并覆盖 method2:
class SubClass(SuperClass):
def method2(self):
print(self.__class__.__name__)
并运行它:
sub = SubClass()
sub.method1()
现在将打印“子类”。
尽管如此,我们只像以前一样调用 method1() 。在 method1() 中调用了 method2(),但两者都绑定(bind)到同一个引用(Python 中的 self,Java 中的 this)。在子类化过程中,SuperClass method2() 发生了变化,这意味着 SubClass 的一个对象引用了该方法的不同版本。
那是开放递归。
在大多数情况下,您会覆盖方法并直接调用被覆盖的方法。
这个方案在这里使用了自引用的间接。
P.S.:我不认为这是发明的,而是发现然后解释的。

关于oop - 什么是开放递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6089086/

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