객체는 목록 이해에 메서드를 포함하지 않습니다.
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 :
- 서브 파일을 호출하고,
- 데이터 이름 목록 생성
- 목록을 반복하여 개체를 인스턴스화합니다. 과
- 각 개체에 대해 '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의 디버깅 검사기 코드를 담당하는 코더에게 문의하십시오. 위험한 추측으로 : 목록에 묶인 개체를 표시 할 때 화면 공간을 절약합니다.