본문 바로가기
개발 이야기/Python

Python - 15. 클래스.

by Crazy Lazy 2021. 7. 25.

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