gpt4 book ai didi

python - 对象不包括列表推导中的方法

转载 作者:行者123 更新时间:2023-12-04 15:12:06 26 4
gpt4 key购买 nike

这个问题与 my previous question以及比尔在那里的回应。

我在 subfile.py 中有一个名为 StrucData 的类

class StrucData:  
def __init__(self, name):
self.name=name

def loadData(self, size=1, cost=1):
self.size=size
self.cost=cost
return self

在我的主文件中:

  1. 调用子文件,
  2. 创建数据名称列表
  3. 循环遍历列表以实例化对象;和
  4. 使用“loadData”方法为每个对象加载数据(我使用相同的“size”和“cost”来简化此示例。)

一次性使用列表理解:

# in the main file

from subfile import StrucData

listIndex=['data1','data2','data3']
listObjects = [StrucData(idx).loadData(size=3, cost=4) for idx in listIndex]

输出是

listObjects=[object1, object2, object3]

其中每个对象都包含其在 subfile.py 中定义的属性(名称、大小、成本)。 enter image description here

我想知道的是,当我使用与以下代码相同的代码定义一个对象时

x=StrucData(listIndex[0]).loadData(size=3, cost=4) 

它也包含“loadData”方法。 enter image description here

谁能给我解释一下为什么会这样?

我使用的是Spyder的anaconda3发行版,版本信息为 enter image description here

最佳答案

在 Spyder 中调试您的应用程序时使用的检查器将列表中的对象与相同类型的单个对象区别对待。它只是显示不同的东西,并且 - 如果在列表中 - 省略功能。

您可以通过打印来轻松检查两个对象是否具有此方法:

listIndex = ['data1','data2','data3']
listObjects = [StrucData(idx).loadData(size=3, cost=4) for idx in listIndex]

other = StrucData("other").loadData(size=3, cost=4)

print(listObjects[0].loadData)
print(other.loadData)

您可以将列表元素之一分配给普通变量并检查其检查器输出以验证:

lO = listObjects[1]

设置断点并检查它 - 现在方法出现了。

至于为什么:请教负责Spyder调试检查器代码的coder。作为一个冒险的猜测:在显示捆绑在列表中的对象时节省屏幕空间。

关于python - 对象不包括列表推导中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65036850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com