속성에는 클래스 속성과 인스턴스 속성이 있다. __init__으로 만들었던 속성이 인스턴트 속성이다.
클래스 속성은 클래스에 속해있는 모든 인스턴스들이 공유한다.
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)
['책', '열쇠']
['책', '열쇠']
클래스 속성에 접근할 떄 self를 사용하는것 보다 클래스 이름으로 접근하는게 좀더 명확하다.
class Person:
bag = []
def put_bag(self, stuff):
Person.bag.append(stuff)
james = Person()
james.put_bag('책')
maria = Person()
maria.put_bag("열쇠")
print(Person.bag)
['책', '열쇠']
<aside> 💡
파이썬에서 속성, 메서드 이름을 찾을 때 인스턴스, 클래스 순으로 찾는다.
인스턴스와 클래스에서 __dict__ 속성을 출력해 보면 현재 인스턴스와 클래스의 속성을 딕셔너리로 확인할 수 있다.
</aside>
모든 클래스와 공유하기 싫으면 인스턴스 속성으로 만들어 주면 된다.
class Person:
def __init__(self):
self.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)
['책']
['열쇠']
class Knight:
__item_limit = 10
def print_item_limit(self):
print(Knight.__item_limit)
x = Knight()
x.print_item_limit()
함수와 마찬가지로 클래스와 메서드도 독스트링을 사용할 수 있다.