gpt4 book ai didi

python - python __call__ 什么时候会被调用?

转载 作者:行者123 更新时间:2023-12-01 03:49:07 26 4
gpt4 key购买 nike

我试图理解下面的代码。

class Chain(object):

def __init__(self, path=''):
self._path = path

def __getattr__(self, path):
return Chain('%s/%s' % (self._path, path))

def __str__(self):
return self._path

__repr__ = __str__

def __call__(self, path):
return Chain('%s/%s' % (self._path, path))


print (Chain().abc.efg("string").repos)

输出为:

/abc/efg/string/repos

我不明白的是为什么 __call__ 方法没有在 Chain(/abc) 中调用,而是在 Chain(/abc/efg)

最佳答案

__getattr__ 用于类实例的属性查找。 __call__ 在类实例用作函数时使用。

Chain()                          # creates a class instance
Chain().abc # calls __getattr__ which returns new instance
Chain().abc.efg # calls __getattr__ which returns new instance
Chain().abc.efg("string") # calls __call__

__getattr__ 只能处理 python 识别为有效变量名的字符串。当需要不符合要求的字符串时,__call__ 很有用。因此,Chain().abc.def("some string with space") 就是一个很好的例子。

关于python - python __call__ 什么时候会被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38509124/

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