Python 对象不包括列表中的方法

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中: 调用子文件 创建数据名列表

这个问题与 还有比尔的回答

我在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中:

  • 调用子文件
  • 创建数据名列表
  • 循环遍历列表以实例化对象;及
  • 为每个对象使用“loadData”方法加载数据(我使用相同的“大小”和“成本”来简化此示例。)
  • 一次使用列表理解:

    # 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
    显示为一种方法?为什么不呢?谢谢你指出错误并改正。我的本地版本缩进正确。因此,我将投票支持下面帕特里克的答案:)