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(“带空格的字符串”)
就是一个很好的例子