22. class - 함수
1 체크 리스트
- 클래스에 클래스변수와 클래스함수( )를 정의할 수 있는가?
- 사용자가 정의한 클래스를 객체로 만들 수 있는가?
- 객체의 요소를 .도트연산자를 사용해 객체변수와 객체함수( )를 사용 할 수 있는가?
- 클래스 함수( )와 클래스 생성자( )를 구분하고 이해할 수 있는가?
- 생성자 오버로딩과 클래스 데코레이터를 이해하고 있는가?
2 클래스 함수
2.1 "도서"의 속성 (제목, 크기, 무게, 재질, 출판사, 발행일 등)을 클래스변수라는 소스 코드로 구현했다.
# 도서의 속성을 변수 로 구현
title = "파이썬 프로그래밍"
dttm = "2023-01-01"
size = "600 x 400 x 40"
# 도서의 속성을 클래스 로 구현
class book:
title = "파이썬 프로그래밍"
dttm = "2023-01-01"
size = "600 x 400 x 40"
# 1
# book 클래스를 객체로 선언하고,
# 클래스변수(title, dttm, size)를 print() 함수로 각각출력해보세요.
2.2 클래스 내부에, 함수를 만들어 실행 해보세요.
class book:
title = "파이썬 프로그래밍"
dttm = "2023-01-01"
size = "600 x 400 x 40"
def say():
print("Hello Class")
# 1
# book 클래스를 객체로 선언하고, 클래스함수 say()를 사용해보세요
# tip
# 객체이름.클래스변수이름
# 객체이름.클래스함수이름
2.3 클래스 내부에, 문자열를 매개변수로 전달받아 출력하는 함수를 구현해보세요.
class book:
title = "파이썬 프로그래밍"
dttm = "2023-01-01"
size = "600 x 400 x 40"
def echo(str):
print(str)
2.4 클래스 변수 title 의 값을 수정하는 클래스함수( )를 구현해보세요.
# * self 의미: "이 클래스의"
class book:
title = "파이썬 프로그래밍"
dttm = "2023-01-01"
size = "600 x 400 x 40"
def setTitle(self, str):
self.title = str
2.5 클래스변수 title, dttm, size 의 값을 수정하는 클래스함수( )를 각각 구현하고 실행해보세요
# 도서의 속성을 변수 로 구현
title = "파이썬 프로그래밍"
dttm = "2023-01-01"
size = "600 x 400 x 40"
# 도서의 속성을 클래스 로 구현
class book:
title = "파이썬 프로그래밍"
dttm = "2023-01-01"
size = "600 x 400 x 40"
def setTitle(self, str):
self.title = str
def setDttm(self, datetime):
self.dttm = datetime
def setSize(self, details):
self.size = details
obj_book = book()
print(obj_book.title, obj_book.dttm, obj_book.size)
obj_book.setTitle(obj_book, "클래스변수를변경해보자")
print(obj_book.title)
obj_book.setDttm(obj_book, "날짜를변경해보자")
print(obj_book.dttm)
obj_book.setSize(obj_book, "사이즈를변경해보자")
print(obj_book.size)
3 클래스 생성자
: 클래스 생성자Constructor는 클래서 선언과 동시에 클래스변수를 초기화하는 작업을 한 번에 할 수 있도록 발전되었다.
3.1 클래스 초기화 원형
# 클래스에 클래스변수 3개를 선언하고
# 함수를 만들어, 클래스변수 3개에 값을 변경 할 수 있도록 구현하세요
class cls:
var1 = None
var2 = None
var3 = None
def setClassVars(self, pram1, pram2, pram3):
self.var1 = pram1
self.var2 = pram2
self.var3 = pram3
obj = cls()
obj.setClassVars("클래스변수", "입력하려면", "함수를써야죠")
3.2 클래스 초기화 축약
- self 를 사용하게 되면서, 클래스변수 var1, var2, var3 를 생략 가능하다.
class cls:
def setClassVars(self, pram1, pram2, pram3):
self.var1 = pram1
self.var2 = pram2
self.var3 = pram3
obj = cls()
obj.setClassVars("클래스변수", "입력하려면", "함수를써야죠")
3.3 클래스 생성자
- 위의 "클래스변수 초기화 → 축약" 내용과 생성자를 사용한 객체 선언 과정을 비교해보자
- 생성자를 통해 선언과 동시에 클래스변수를 초기화 할 수 있게 되었다.
class cls2:
def __init__(self, pram1, pram2, pram3): #생성자
self.var1 = pram1
self.var2 = pram2
self.var3 = pram3
obj = cls2(obj, "클래스변수", "입력하려면", "함수를써야죠")
3.4 클래스 생성자 사용 문제
파이썬에서는 생성자를 여러개 만들 수 없다.
그래서 생성자를 매개변수를 정의하면, 객체 선언시 매개변수의 갯수만큼 실인수를 무조건 입력해야 한다,
class cls4:
def __init__(self, pram1, pram2, pram3):
self.var1 = pram1
self.var2 = pram2
self.var3 = pram3
obj = cls4() # 불가능하다 pram1, pram2, pram3 자리의 실인수를 입력해야 한다.
# TypeError: __init__() missing 3 required positional arguments: 'pram1', 'pram2', and 'pram3'
방법 1
# 매개변수 자리수 만큼 None 처리
obj = cls4(None, None, None)
방법 2
# @classmethod 데코레이터를 이용해, 클래스 함수를 구현한다.
class cls5:
def __init__(self, pram1, pram2, pram3):
self.var1 = pram1
self.var2 = pram2
self.var3 = pram3
@classmethod
def init(cls):
return cls(None, None, None)
obj1 = cls5("생성자의", "매개변수를", "입력해야한다.")
obj2 = cls5.init()
댓글
이 글 공유하기
다른 글
-
24. 모듈, 패키지
24. 모듈, 패키지
2024.02.03 -
23. class - 상속, 오버라이딩
23. class - 상속, 오버라이딩
2024.02.03 -
21. class - 변수
21. class - 변수
2024.02.03 -
20. 얕은 복사, 깊은 복사
20. 얕은 복사, 깊은 복사
2024.02.03