Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 객체 안의 객체(중첩 객체)에 접근하는 방법

Python에서는 하나의 객체가 또 다른 객체를 자신의 속성(attribute)으로 가질 수 있습니다. 이렇게 중첩된 객체 안의 객체는 점(.) 연산자를 이용한 속성 접근과 리스트 인덱싱을 조합하여 간단하게 접근할 수 있습니다.

아래 예제를 통해 객체 내부에 포함된 객체의 메서드와 데이터에 순차적으로 접근하는 방법을 살펴보겠습니다.

예제 코드

class P:
    def __init__(self):
        self.w = Q()

class Q:
    def __init__(self):
        self.list = [3, 4, 5]

    def function(self):
        self.list[2] = 7

y = P()
f = [y]
print(f[0].w.function())
print(f[0].w.list)

실행 결과

None
[3, 4, 7]

코드 설명

1. 중첩 객체 구조 만들기

클래스 P의 생성자(__init__) 안에서 클래스 Q의 인스턴스를 생성하여 self.w에 저장합니다. 즉, P 객체 하나당 내부에 Q 객체가 하나씩 포함되는 구조입니다.

2. 객체를 리스트에 담기

y = P()로 객체를 생성한 뒤, f = [y]를 통해 이 객체를 리스트에 넣습니다. 따라서 f[0]은 곧 객체 y를 의미합니다.

3. 점 연산자로 중첩 객체 접근하기

f[0].w.function()은 다음과 같이 단계적으로 해석됩니다.

  • f[0]: 리스트의 첫 번째 요소, 즉 P 객체 y
  • f[0].w: P 객체 내부의 Q 객체
  • f[0].w.function(): Q 객체의 메서드 호출 → 리스트의 세 번째 요소를 7로 변경

4. None이 출력되는 이유

function() 메서드는 리스트 값을 변경만 할 뿐 아무런 값도 return하지 않습니다. Python에서 return 문이 없는 함수는 자동으로 None을 반환하므로, 첫 번째 print 결과가 None으로 표시됩니다.

5. 최종 값 확인

f[0].w.list를 출력하면 메서드 호출로 인해 세 번째 요소가 5에서 7로 바뀐 [3, 4, 7]이 출력됩니다.

정리

객체 안의 객체에 접근할 때는 점(.) 연산자를 체인처럼 연결하면 됩니다. 리스트나 딕셔너리 같은 컨테이너에 객체가 담겨 있다면, 먼저 인덱싱으로 객체를 꺼낸 후 점 연산자로 내부 속성과 메서드에 접근하는 방식을 기억하면 됩니다.