Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 속성
- 제어문
- 코딩도장
- NLP
- 함수
- 제로베이스 데이터사이언스
- 추천시스템
- 아이펠
- 클래스
- 후기
- 스크랩
- 기사
- Python
- 데이터사이언티스트
- Set
- TensorFlow
- 사이킷런
- 데이터사이언스 스쿨
- 파이썬코딩도장
- 파이썬
- numpy
- AI
- 재귀함수
- 머신러닝
- AIFFEL
- 데이터분석
- 딥러닝
- 딕셔너리
- 자연어처리
- 카카오
Archives
- Today
- Total
뮤트 개발일지
[파이썬 코딩 도장] Unit 35. 클래스 속성과 정적, 클래스 메서드 사용하기 본문
클래스 속성과 인스턴스 속성 알아보기
클래스 속성
class 클래스이름:
속성 = 값
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)
['책', '열쇠']
['책', '열쇠']
클래스 속성은 모든 인스턴스에서 공유한다.
클래스 속성에 접근하기
class Person:
bag = []
def put_bag(self, stuff):
Person.bag.append(stuff) # 클래스 이름으로 클래스 속성에 접근
print(Person.bag)
인스턴스 속성 사용하기
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 클래스이름:
__속성 = 값 # 비공개 클래스 속성
class Knight:
__item_limit = 10 # 비공개 클래스 속성
def print_item_limit(self):
print(Knight.__item_limit) # 클래스 안에서만 접근할 수 있음
x = Knight()
x.print_item_limit() # 10
print(Knight.__item_limit) # 클래스 바깥에서는 접근할 수 없음
10
Traceback (most recent call last):
File "C:\project\class_private_class_attribute_error.py ", line 11, in <module>
print(Knight.__item_limit) # 클래스 바깥에서는 접근할 수 없음
AttributeError: type object 'Knight' has no attribute '__item_limit'
정적 메서드 사용하기
정적 메서드는 @staticmethod를 메서드 위에 붙인다. 이 때 정적 메서드는 매개변수에 self를 지정하지 않는다.
@는 데코레이터라고 하며 메서드(함수)에 추가 기능을 구현할 때 사용한다.
class 클래스이름:
@staticmethod
def 메서드(매개변수1, 매개변수2):
코드
class Calc:
@staticmethod
def add(a, b):
print(a + b)
@staticmethod
def mul(a, b):
print(a * b)
Calc.add(10, 20) # 클래스에서 바로 메서드 호출
Calc.mul(10, 20) # 클래스에서 바로 메서드 호출
정적 메서드는 self 를 받지 않으므로 인스턴스 속성에 접근할 수 없다. 그래서 보통 인스턴스 속성, 인스턴스 메서드가 필요없을 때 사용한다. 또한 메서드의 실행이 외부 상태에 영향을 끼치지 않는 순수 함수를 만들 때 사용한다. 순수 함수는 부수 효과가 없고 입력 값이 같으면 언제나 같은 출력 값을 반환한다. 즉, 정적 메서드는 인스턴스의 상태를 변화시키지 않는 메서드를 만들 때 사용한다.
파이썬 자료형의 인스턴스 메서드와 정적 메서드
>>> a = {1, 2, 3, 4}
>>> a.update({5}) # 인스턴스 메서드
>>> a
{1, 2, 3, 4, 5}
>>> set.union({1, 2, 3, 4}, {5}) # 정적(클래스) 메서드
{1, 2, 3, 4, 5}
인스턴스의 내용을 변경할 때는 update와 같이 인스턴스 메서드로 작성하고,
인스턴스 내용과는 상관없이 결과만 구할 때는 set.union과 같이 정적 메서드로 작성한다.
클래스 메서드 사용하기
클래스 메서드는 메서드 위에 @classmethod를 붙인다. 이 때 첫 번째 매개변수로 cls를 지정해야 한다.
class 클래스이름:
@classmethod
def 메서드(cls, 매개변수1, 매개변수2):
코드
class Person:
count = 0 # 클래스 속성
def __init__(self):
Person.count += 1 # 인스턴스가 만들어질 때
# 클래스 속성 count에 1을 더함
@classmethod
def print_count(cls):
print('{0}명 생성되었습니다.'.format(cls.count)) # cls로 클래스 속성에 접근
james = Person()
maria = Person()
Person.print_count() # 2명 생성되었습니다.
2명 생성되었습니다.
cls를 사용하면서 메서드 안에서 현재 클래스의 인스턴스를 만들 수 있다.
즉, cls는 클래스이므로 cls()는 Person()과 같다.
@classmethod
def create(cls):
p = cls() # cls()로 인스턴스 생성
return p
'코딩도장' 카테고리의 다른 글
[파이썬 코딩 도장] Unit 23. 2차원 리스트 사용하기 (0) | 2022.01.05 |
---|---|
[파이썬 코딩 도장] Unit 45. 모듈과 패키지 만들기 (0) | 2022.01.05 |
[파이썬 코딩 도장] Unit 34. 클래스 사용하기 (0) | 2022.01.03 |
[파이썬 코딩 도장] Unit 31. 함수에서 재귀호출 사용하기 (0) | 2021.12.30 |
[파이썬 코딩 도장] Unit 25. 딕셔너리 응용하기 (0) | 2021.12.29 |