[파이썬 문법] 클래스(class)
문법 정리해보려고 만들어봅니다.
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() # 꼬끼오