개념

[파이썬 문법] 클래스(class)

ris 2024. 11. 20. 18:17

문법 정리해보려고 만들어봅니다.

 

class Human:
    def __init__(self, height, weight, age):
        self.height = height
        self.weight = weight
        self.age = age
    
    def state(self):
        print("키는 {}cm, 몸무게는 {}kg, 나이는 {}살입니다.".format(self.height, self.weight, self.age))

민수 = Human(170, 70, 15)
민수.state() # 키는 170cm, 몸무게는 70kg, 나이는 15살

 

예시 코드를 가지고 설명해보겠습니다.

 

클래스란?


클래스는 쉽게 예를 들어 설계도입니다.

위 코드에서는 인간에 대한 설계도를 담고 있죠.

인간이 가지는 특성과 변수값을 담은 것입니다.

여기서 변수값은 height, weight, age가 있겠네요.

 

인스턴스


코드에서 클래스를 바로 사용하지 않고 '민수'라는 변수에 클래스를 담고 실행시킵니다. 왜 그럴까요?

이 이유는 인스턴스에 있습니다.

Python에서 클래스는 대부분의 상황에서 인스턴스가 없이는 발동되지 않습니다.

이는 이렇게 이해하면 쉽습니다.

클래스는 설계도이고, 인스턴스는 생산품이라고 할 수 있겠네요.

self


코드를 보다보면 self라는 것이 자꾸 나옵니다. 이 self는 무슨 역할을 할까요?

self는 인스턴스끼리 컴퓨터가 구별할 수 있도록 해줍니다.

고로 각 인스턴스마다 개별적인 값을 가져야한다면 self를 써줘야합니다.

하지만 모든 인스턴스가 공통으로 가져야하는 값에는 필요가 없습니다.

 

초기화


클래스에서는 클래스 내부에서 쓰일 지역 변수를 설정해줘야할 때가 있습니다.

이때 쓰이는 것이 __init__ 함수입니다. init은 initalize(초기화하다)의 약자로 Python에서는 초기화 함수로 __init__이 고정되어있습니다. 물론 다른 함수로도 초기화는 가능합니다. 하지만 init은 다른 메서드는 없는 고유한 특성을 가지고 있습니다. 바로 인스턴스 생성과 동시에 초기화되는 것입니다. 코드로 설명은 대신하겠습니다.

 

__init__

class example():
    def __init__(self):
        self.value = 10
    def valueprint(self):
        print(self.value)

a = example()
a.valueprint() # 10

 

other

class example():
    def initalize(self):
        self.value = 10
    def valueprint(self):
        print(self.value)

a = example()
a.initalize()
a.valueprint() # 10

상속


상속은 정말 간단합니다.

그저 부모 클래스의 것을 자식 클래스가 사용할 수 있도록 하는 것입니다.

 

class Bird():
    def birdcry(self):
        print("짹짹")

class Chicken(Bird):
    pass

chicken = Chicken()
chicken.birdcry() # 짹짹

 

참고로 부모 클래스 상속 시 자식 클래스에 별도로 __init__을 해주지 않으면 부모 클래스의 변수를 모두 상속받습니다.

자식 클래스에서 __init__을 해준다면 부모 클래스의 __init__  내의 초기화된 변수는 상속되지 않습니다.

 

메소드 오버라이딩


메소드 오버라이딩은 부모 클래스를 상속받을 때 부모 클래스의 메소드를 변경하는 것입니다.

아래는 예시 코드입니다.

class Bird():
    def birdcry(self):
        print("짹짹")

class Chicken(Bird):
    def birdcry(self):
        print("꼬끼오")

chicken = Chicken()
chicken.birdcry() # 꼬끼오