[Python] 클래스 속성과 인스턴스 속성

cdwde·2021년 5월 21일
0

❗ 속성, 메서드 이름을 찾는 순서

  • 인스턴스 > 클래스 순으로 찾음
  • __dict__속성 출력해보면 현재 인스턴스와 클래스의 속성을 딕셔너리로 확인 가능

🎈 클래스 속성

class 클래스이름:
   속성 =
  • 클래스이름.클래스변수로 사용
  • 클래스에 속해있으며 모든 인스턴스에서 공유
  • 인스턴스 전체가 사용해야 하는 값을 저장할 때 사용

예시

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

human1 = Person()
human1.put_bag('책')

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

print(human1.__dict__)
print(human2.__dict__)
print(Person.__dict__)

print(human1.bag)	#겉보기에는 인스턴스 속성을 사용하는 것 같지만 클래스 속성 사용
print(human2.bag)	#겉보기에는 인스턴스 속성을 사용하는 것 같지만 클래스 속성 사용
print(Person.bag)

#출력 결과
#{}
#{}
#{'__module__': '__main__', 'bag': ['책', '열쇠'], 'put_bag': <function Person.put_bag at 0x01DAC4A8>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
#['책', '열쇠']
#['책', '열쇠']
#['책', '열쇠']

🎈 인스턴스 속성

  • 생성자(__init__)에서 self.속성에 할당했던 변수들은 모두 인스턴스 속성에 해당
  • 인스턴스별로 독립
  • 각 인스턴스가 값을 따로 저장해야 할 때 사용

예시

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

human1 = Person()
human1.put_bag('책')

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

print(human1.__dict__)
print(human2.__dict__)
print(Person.__dict__)

print(human1.bag)
print(human2.bag)

#출력 결과
#{'bag': ['책']}
#{'bag': ['열쇠']}
#{'__module__': '__main__', '__init__': <function Person.__init__ at 0x01DDC4F0>, 'put_bag': <function Person.put_bag at 0x01DDC4A8>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
#['책']
#['열쇠']

참고
https://dojang.io/mod/page/view.php?id=2378
https://wikidocs.net/16072

0개의 댓글