1. 클래스(class) 정의 및 특징.
- 똑같은 무언가를 계속해서 만들 수 있는 설계 도면과 같은 것.
- 표현으로 따지면, 일종의 부류, 종류라고 할 수도 있음.
- 클래스 내부에 다양한 변수,함수(메서드)들을 생성해서 활용 가능.
- 클래스로 생성한 인스턴스(실체를 갖고 있는 객체)들은 각각 고유한 성격을 보유. (서로 간에 영향 x)
# class 정의
class 클래스명:
클래스내용
# Instance 생성.
a = 클래스명()
# 예시.
class Abc:
ab = 3
def aa(self): # self 는 추후 class 를 instace 로 생성 시 자기 자신을 말함. (호출 시엔 생략)
return 'test'
a = Abc()
a.ab # 결과 : 3
a.aa() # 결과 : 'test'
2. 메서드.
- 클래스 내 메서드 사용 시 첫번째 매개변수는 인스턴스 자기자신으로, 메서드 매개변수에 명시적으로 기재해야 함.
(호출 시엔 생략 가능.)
- 메서드 내 변수는 같은 클래스의 인스턴스 중 변경되지 않은 변수는 서로 공유할 수 있음.
class Calc:
c = 0
d = 1
e = 2
def add(self,a,b): # self 는 추후 class 를 instace 로 생성 시 자기 자신을 말함. (호출 시엔 생략)
self.c = a + b
def minus(self,a,b): # self 는 추후 class 를 instace 로 생성 시 자기 자신을 말함. (호출 시엔 생략)
self.c = a - b
# 호출 예시.
aa = Calc()
bb = Calc()
Calc.add(aa,1,2) # 생략하지 않고 사용하는 방법.
bb.add(3,4) # 호출 시엔 자기 자신의 매개변수는 생략.
print(aa.c,bb.c) # 결과 : 3 7
# 클래스 변수 공유 예시. (각 라인별로 실행해야 함에 주의)
print(aa.d,bb.d,aa.e,bb.e) # 결과 : 1 1 2 2
Calc.d = 7
print(aa.d,bb.d,aa.e,bb.e) # 결과 : 7 7 2 2
aa.e = 13
Calc.e = 9
print(aa.d,bb.d,aa.e,bb.e) # 결과 : 7 7 13 9
3. 생성자.
- __init__ 으로 사용.
- 클래스 생성 시 자동 호출되는 메서드.
- 매개변수를 받아들일 수 있음.
- 생성자의 매개변수와 동일하여야 함.
- 생성자도 인스턴스 자기자신을 첫번째 매개변수로 선언해야 함.
# 매개변수를 받지 않는 생성자 예시.
class Calc:
c = 0
def __init__(self): # 인스턴스 생성 시 자동 호출.
print('생성자 호출됨')
self.c = 1
def add(self,a,b): # self 는 추후 class 를 instace 로 생성 시 자기 자신을 말함. (호출 시엔 생략)
self.c = a + b
def minus(self,a,b): # self 는 추후 class 를 instace 로 생성 시 자기 자신을 말함. (호출 시엔 생략)
self.c = a - b
a=Calc() # 결과 : 생성자 호출됨
a.c # 결과 : 1
# 매개변수를 받는 생성자 예시.
class Calc:
c = 0
def __init__(self,a): # 인스턴스 생성 시 자동 호출.
print('생성자 호출됨')
self.c = a
def add(self,a,b): # self 는 추후 class 를 instace 로 생성 시 자기 자신을 말함. (호출 시엔 생략)
self.c = a + b
def minus(self,a,b): # self 는 추후 class 를 instace 로 생성 시 자기 자신을 말함. (호출 시엔 생략)
self.c = a - b
a=Calc() # 결과 : 오류
a=Calc(7) # 결과 : 7
a.c # 결과 : 7
4. 상속.
- 다른 클래스의 기능을 물려받음.
- 상속 받은 메서드는 오버라이딩(Overriding : 덮어쓰기)가능.
# 사용법.
class 생성할클래스명(상속할클래스명)
# 예시.
class Calc:
c = 0
def add(self,a,b): # self 는 추후 class 를 instace 로 생성 시 자기 자신을 말함. (호출 시엔 생략)
self.c = a + b
def minus(self,a,b): # self 는 추후 class 를 instace 로 생성 시 자기 자신을 말함. (호출 시엔 생략)
self.c = a - b
class Calc2(Calc):
def div(self,a,b):
self.c = a / b
abc = Calc2()
abc.c # 결과 : 0
abc.div(4,2)
abc.c # 결과 : 2.0
# 메서드 오버라이딩
class Calc3(Calc2):
def div(self,a,b):
if b == 0:
self.c = 0
else:
self.c = a / b
print(self.c)
aaa = Calc3()
abc.div(4,0) # 결과 : 오류
aaa.div(4,0) # 결과 : 0
'개발 이야기 > Python' 카테고리의 다른 글
Python FastAPI 의 Docs 화면 꾸미기! (1) | 2023.12.14 |
---|---|
Python - 16. 모듈. (0) | 2021.07.26 |
Python - 14. 입출력. (0) | 2021.07.24 |
Python - 13. 함수 (0) | 2021.07.23 |
Python - 11. 조건문(if) (0) | 2021.07.21 |