从 Python Lambda 表达式访问另一个类中的类成员

问题描述 投票:0回答:1

我不明白为什么我不能在 lambda 中引用嵌套类的整数成员。 下面的代码演示了失败的情况。 在reduce 命令之前的打印中使用相同的引用,没有问题。

我遗漏了一些微妙之处吗?

from functools import reduce

class B :

    def __init__(self, n) :
        self.length = n


class A :
    
    def __init__(self, n) :
        self.b = B(n)


myList = [A(1), A(5), A(7)]

print( myList[0].b.length )
print( reduce(lambda a, b : a.b.length + b.b.length, myList) )

我期待reduce 中的lambda 添加列出的类中包含的数字。 我进行了搜索,但找到了可以解释我遇到的问题的术语。 下面的输出显示了错误。 如有任何帮助,我们将不胜感激。

1
Traceback (most recent call last):
  File "main.py", line 20, in <module>
    print( reduce(lambda a, b : a.b.length + b.b.length, myList) )
  File "main.py", line 20, in <lambda>
    print( reduce(lambda a, b : a.b.length + b.b.length, myList) )
AttributeError: 'int' object has no attribute 'b'
python class lambda reduce
1个回答
0
投票

reduce 函数需要返回 A 类的实例才能继续访问

.b.length
,否则,它返回一个 int,然后尝试为列表的其余部分计算
<type: int> + b.b.length

您正在寻找

sum(x.b.length for x in myList)

© www.soinside.com 2019 - 2024. All rights reserved.