为什么此python链函数调用失败?

时间:2019-02-12 01:46:20

标签: python

我已经重写了python类方法,如下所示:

    def __dir__(self):

        # return  super().__dir__().append('extra') #failed
        # return  (super().__dir__()).append('extra') #failed

        #failed
        # rtn = super();
        # return rtn.__dir__().append('extra')

        #works
        rtn = super().__dir__()
        rtn.append('extra')
        return rtn

并得到此错误:

  

TypeError:“ NoneType”对象不可迭代

我不介意再写几行代码,但是我只是好奇为什么oneliner无法正常工作?

1 个答案:

答案 0 :(得分:4)

return  super().__dir__().append('extra')

失败,因为append不返回列表,它在修改获取的列表后返回None

rtn = super();
return rtn.__dir__().append('extra')

失败,因为您有效地分裂了指向super()的位置,然后调用了该方法,但是仍然存在与上一个示例相同的问题。

您的最后一个示例有效,因为您实际上捕获了列表,然后在修改后将其返回。