gpt4 book ai didi

python - python 2 中 __getattr__(self, __getitem__) 的内部

转载 作者:行者123 更新时间:2023-12-01 03:39:57 24 4
gpt4 key购买 nike

在 python2 中,这个旧式类:

class C:
x = 'foo'
def __getattr__(self, name):
print name
print type(name)
return getattr(self.x, name)

> X = C()
> X[1]
__getitem__
<type 'str'>
'o'

问题是,这里面到底发生了什么?更具体地说,如果 name 只是一个字符串,那么索引 1 如何存储,以便 getattr 知道它必须调用 __getitem__ (1) 检索字符o

最佳答案

直接切入正题,这就是正在一步步发生的事情。

当您调用X[1]时,它将尝试在您的类中查找名为__getitem__的属性。由于您没有任何具有该名称的属性(函数或变量),因此它将回退到使用属性名称 (__getitem__) 调用您的 __getattr__ 方法,它是要求。该名称始终是一个字符串。

当您执行 "return getattr(self.x, name)" 时,您实际上所做的是返回“foo”的 __getitem__ 方法,即: "foo".__getitem__ 然后使用参数 1 调用: "foo".__getitem__(1)"foo"[1] 相同code> 返回第一个“o”。

关于python - python 2 中 __getattr__(self, __getitem__) 的内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39761778/

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