这个问题与 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
在我的主文件中:
- 调用子文件,
- 创建数据名称列表
- 循环遍历列表以实例化对象;和
- 使用“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 中定义的属性(名称、大小、成本)。
我想知道的是,当我使用与以下代码相同的代码定义一个对象时
x=StrucData(listIndex[0]).loadData(size=3, cost=4)
谁能给我解释一下为什么会这样?
最佳答案
在 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/