Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python调用将在何时调用?_Python - Fatal编程技术网

python调用将在何时调用?

python调用将在何时调用?,python,Python,我试图理解以下代码 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__

我试图理解以下代码

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

我不明白的是,为什么在
链(/abc)
中没有调用
\uuu调用\uuu
方法,而是在
链(/abc/efg)
中调用
方法被视为属性而不是方法调用。因此,它应该由
\uuu getattr\uuu
来处理,而不是
\uu调用
\uu getattr\uu
用于类实例的属性查找<代码>\uuuu调用
在类实例用作函数时使用

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__
\uuuu getattr\uuuu
只能处理python识别为有效变量名的字符串<代码>\uuuu调用\uuuu
在需要不一致字符串时非常有用。例如,
Chain().abc.def(“带空格的字符串”)
就是一个很好的例子