Python 对象不包括列表中的方法
这个问题与 还有比尔的回答 我在subfile.py中有一个名为strucata的类Python 对象不包括列表中的方法,python,list,object,list-comprehension,instantiation,Python,List,Object,List Comprehension,Instantiation,这个问题与 还有比尔的回答 我在subfile.py中有一个名为strucata的类 class StrucData: def __init__(self, name): self.name=name def loadData(self, size=1, cost=1): self.size=size self.cost=cost return self 在主文件I中: 调用子文件 创建数据名列表
class StrucData:
def __init__(self, name):
self.name=name
def loadData(self, size=1, cost=1):
self.size=size
self.cost=cost
return self
在主文件I中:
# 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)
它也包含“loadData”方法。
谁能给我解释一下为什么会这样
我使用的是Spyder的anaconda3发行版,版本信息是
在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调试检查器代码的编码人员。冒昧猜测:显示捆绑在列表中的对象时保存屏幕状态。缩进不正确。正如您现在看到的,我们无法判断
loadData
是否打算成为类StructData
的方法,尽管它有self
参数,并且您显示的这个检查器类型列表表明它是。但是,为什么您要问为什么loadData
显示为一种方法?为什么不呢?谢谢你指出错误并改正。我的本地版本缩进正确。因此,我将投票支持下面帕特里克的答案:)