gpt4 book ai didi

python - 如何在 `__getattr__` 内部传递参数

转载 作者:太空宇宙 更新时间:2023-11-04 09:38:37 27 4
gpt4 key购买 nike

我了解__getattr__ 方法的基本功能和用例。但是我在如何在 __getattr__ 中传递参数时遇到了问题。

我有代码

class Wrapper:
def __init__(self, object):
self.wrapped = object
def __getattr__(self, attrname):
print('trace: ' + attrname)
return getattr(self.wrapped, attrname)


x = Wrapper([1, 2, 3])
x.append(4)
print(x.wrapped)

然后打印

trace: append
[1, 2, 3, 4]

如果我下面的假设不正确,请原谅我。我假设 x.append(4) 中的参数 4 以某种方式从对 __getattr__ 的初始调用传递到对 的调用code>getattr方法,然后到list类的append方法。但我不确定到底发生了什么。有人可以澄清细节。

最佳答案

我是这样理解的:

x = Wrapper([1, 2, 3])

因此,x.wrapped 是一个列表,即[1, 2, 3]

现在,当您执行 x.append 时,您会调用 Wrapper__getattr__,并使用参数 append。所以当 python 解析时:

getattr(self.wrapped, attrname)

它获取内部列表的方法 append,然后将其返回。因此,您可以想象您的代码被解释为:

# just got it outside for later explanation
l = [1, 2, 3]

x = Wrapper(l)

f = x.__getattr__('append')
# here `f` is the `append` method of `l`

f(4) # which is equivalent to `l.append(4)`

# finally
print(x.wrapped)
# which is equivalent to `print(l)`, hence the output
# [1, 2, 3, 4]

希望对您有所帮助。

关于python - 如何在 `__getattr__` 内部传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52575873/

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