• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 엔지니어링

  • 해결 여부

    미해결

클래스의 클래스 변수와 관련된 질문입니다

22.03.08 15:37 작성 조회수 118

0

안녕하세요, 강의에서 소개해 주신 클래스에 관해 조금 더 깊은 내용을 구글링 하던 중, 예시로 보여주신 코드와 비슷한 구조를 가진 코드가 있어 이를 시행하던 중 궁금한 점이 생겼습니다.

관련된 내용을 많이 찾으며 해결을 하려다 보니 질문이 조금 길어질 것 같습니다.. 미리 양해 부탁드립니다. 

class Person:
    bag = []
 
    def put_bag(self, stuff):
        self.bag.append(stuff)
 
james = Person()
james.put_bag('책')

maria = Person()
maria.put_bag('열쇠')

print(james.bag)
print(maria.bag)

다음과 같은 코드인데요,

이 경우는 특이하게 james와 maria라는 각각의 인스턴스를 만들었는데, 

james.bag와 maria.bag의 결과가 같게 출력되는 것을 확인할 수 있었습니다.

james.put_bag('책')

다음과 같이 메소드를 실행하면

self는 결국 인스턴스인 james를 의미하므로 

james.bag.append('책') 이 실행되고,

그 결과 james라는 인스턴스는 '책' 만을  bag 리스트에 가지고 있을 것이라고 처음에는 생각하였습니다.

 

이와 관련된 내용을 찾아보니, 클래스의 '네임스페이스' 에 대한 내용을 볼 수 있었습니다.

네임스페이스의 내용을 기반으로 해당 코드를 다시 살펴보니,

강사님께서 예시로 들어주신 코드에서는 

quad1.width = 10
quad1.height = 10
quad1.color = 'blue'
quad1.name = 'blue 사각형'

다음과 같이 인스턴스에 변수를 추가하였지만, 

위의 코드는 james.bag = [] 와 같이

명시적으로 인스턴스에 변수를 추가하지 않았으므로, 

james.bag.append('책') 이 실행될 때

james 인스턴스의 네임스페이스에서 bag 변수를 찾을 수 없고,

이로 인해 클래스의 네임스페이스에서 bag를 찾아 그 리스트에 '책' 을 넣은 것이라고 판단하였습니다. 

결국 클래스의 네임스페이스에 'bag' : ['책', '열쇠'] 의 형태로 내용이 담기는 것으로 우선 이해하였는데, 

제가 이해한 것이 맞는지 확인하여 주시면 감사하겠습니다...

클래스에 대해 엄청 깊은 내용은 강의에서 다루지 않으셨기에 이런 질문을 드리는 것이 실례일 수도 있다고 생각합니다. 조금만 시간 내주시어 궁금증을 해결해 주신다면 너무나도 감사할 것 같습니다. 부탁드립니다ㅠㅠ

답변 1

답변을 작성해보세요.

0

솔직히 너무 길어서, 무슨 이야기인지 정확히 이해를 못하겠어요. 아무래도 본 강의가 평생 강의라서, 본 질문/답변란이 강의 영상 이해에 관한 내용이 아닌, 그 외적인 부분을 문의하시면 제가 평생 어떤 질문이든 답변을 드려야 해서, 현실적으로 무리가 있거든요. 이 부분은 우선 충분히 이해하실 수 있으실 것 같아요. 양해 부탁드려요.

 

그래도 가능한 간단하게라도 답변을 드릴 수 있으면 드리고 싶은데, 무슨 이야기를 하시는 것인지 정확히 이해가 안가서요.

 

제가 이해하는 범위로 인스턴스 자체에 변수를 추가하신 것인가요? 그렇다면, 인스턴스 자체에 변수를 추가하는 경우는 없어보여요. 인스턴스의 클래스 내에서 변수를 추가한 후, 이를 인스턴스에서 접근하는 것이 일반적인 문법으로 보여서, 이 부분이 헷깔리시는 것이 아닌가 의견을 드립니다.

감사합니다.