gpt4 book ai didi

python - 魔术方法和定义顺序

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:14 24 4
gpt4 key购买 nike

我正在查看 trie implementation 的源代码

第 80-85 行:

def keys(self, prefix=[]):
return self.__keys__(prefix)

def __keys__(self, prefix=[], seen=[]):
result = []
etc.
  1. 什么是def __keys__那是自创的魔法 object 吗?如果是这样,这是糟糕的代码吗?或者 __keys__ 是否作为标准的 Python 魔术方法存在?不过,我在 Python 文档中的任何地方都找不到它。

  2. 为什么函数在 def __keys__ 实例化之前调用 self.__keys__ 是合法的? 不会 def __keys__ 必须在 def keys 之前(因为 keys 调用 __keys__)?

最佳答案

对于你的第二个问题,这是合法的,一个类的函数是在类被定义时定义的,所以你可以确定这两个函数都会在 keys() 被调用之前定义,逻辑也适用于普通函数,我们可以做 -

>>> def a():
... b()
...
>>> def b():
... print("In B()")
...
>>> a()
In B()

这是合法的,因为 a()b() 都是在调用 a() 之前定义的。只有在 b() 被定义之前尝试调用 a() 才会是非法的。请注意定义一个函数不会自动调用它,并且 python 在定义函数时不会验证函数中是否定义了函数中使用的任何函数(直到运行时,当函数被调用时,在这种情况下它会抛出 NameError )

对于您的第一个问题,我不知道有任何名为 __keys__() 的魔术方法,也无法在文档中找到它。

关于python - 魔术方法和定义顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31871505/

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