是否允许对同一数据对象调用多个链式方法?
Python中能否链式调用同一数据对象的多个方法?
这种写法不被允许,运行时会直接触发AttributeError,核心原因是你用到的sort()、reverse()这类列表方法属于原地修改操作——它们会直接修改原对象,但返回值是None,而你没法对None调用任何方法。
逐个分析你的例子:
- 第一个列表操作例子:
foo = ["Bar", "Baz", "A", "F", ] foo.sort().reverse()
foo.sort()会原地把列表排序,但返回None,接下来调用.reverse()就相当于对None调用方法,直接报错:AttributeError: 'NoneType' object has no attribute 'reverse'。
- 第二个字符串转列表后的操作例子:
bar = "Foo bar baz was not very useful in the year seventeen ninety-three ".split() bar.reverse().lower().title()
首先bar.reverse()原地反转列表,返回None,调用.lower()时就会触发报错;退一步说,就算reverse()返回列表,列表本身也没有lower()方法——lower()是字符串专属方法,你得遍历列表里的每个字符串单独调用。
什么时候能链式调用?
只有当前一个方法返回的是可调用后续方法的对象时才行:
- 比如字符串的所有方法(因为字符串不可变,方法都会返回新字符串):
s = "HELLO WORLD" result = s.lower().title() # 合法,输出 "Hello World"
- 或者用非原地修改的替代方法,比如
sorted()(返回新列表)结合切片反转(返回新列表):
foo = ["Bar", "Baz", "A", "F"] result = sorted(foo)[::-1] # 先排序得到新列表,再切片反转,最终得到["F", "Bar", "Baz", "A"]
内容的提问来源于stack exchange,提问作者HJ-1549
相关产品推荐
相关产品推荐

