객체는 목록 이해에 메서드를 포함하지 않습니다.

Nov 27 2020

이 질문은 이전 질문 및 Bill의 답변과 관련 이 있습니다.

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

기본 파일에서 I :

  1. 서브 파일을 호출하고,
  2. 데이터 이름 목록 생성
  3. 목록을 반복하여 개체를 인스턴스화합니다. 과
  4. 각 개체에 대해 '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 배포를 사용하는데, 버전 정보는

답변

2 PatrickArtner Nov 27 2020 at 12:23

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의 디버깅 검사기 코드를 담당하는 코더에게 문의하십시오. 위험한 추측으로 : 목록에 묶인 개체를 표시 할 때 화면 공간을 절약합니다.