django를 사용하면서 클래스와 상속에대한 개념이 자주 나오는데 솔직히 이론이나 정의만 들어서는 잘 와닿지 않고 이해가 안되었다. 그래서 무료 동영상 강의를 찾아 직접 예제 따라하면서 class와 상속이 어떻게 이루어지는지 코드를 작성해보았다. 작성하면서 내가 나름 이해한 것들은 주석으로 정리했다.
참고사이트
[Python] 객체 지향 프로그래밍과 클래스 (Object-Oriented Programming and Class in Python)
## 객체를 생성하기위해 클래스를 만듬, 객체의 속성과 행위를 정의하는 것
## 첫글자는 대문자로 쓴다.
class Car():
## __init__ : 객체의 속성을 초기화
## 파이썬에서는 메소드를 호출할 때 인스턴스 자신을 첫번째 인자로 사용한다.
## 여기서는 뒤에 인스턴스 ferrari를 생성했기 때문에 self인자에 ferrari가 들어갔다고 생각하면 됨
def __init__(self, **kwargs):
## properties를 초기화 해준다.
self.windows = 4
self.wheels = 4
self.seats = 4
self.color = kwargs.get('color', 'black')
self.price = kwargs.get('price', '$20')
## 클래스 안에(들여쓰기했을 때) 정의된 함수를 메소드라고 한다.
## __str__ : 클래스의 인스턴스를 리턴하는 값으로 대체해준다.
def __str__(self):
return '페라리'
## 또 다른 클래스 Convertible을 생성
## 클래스 Car를 상속받음, 상속을 받으면 부모 클래스인 Car의 메소드를 모두 사용할 수 있다.
class Convertible(Car):
## __init__을 재정의 했기 때문에 기존에 Car에서 정의한 것은 사용할 수 없다. super()를 사용하는 이유
def __init__(self, **kwargs):
## 부모 클래스(Car)의 속성(properties)을 모두 가져올 수 있음
super().__init__(**kwargs)
self.time = kwargs.get('time', 10)
def take_off(self):
return "taking off"
def __str__(self):
return '포르쉐'
## 인스턴스 생성
porche = Convertible(color='red', price='$40')
## 바로 위에 지정한 값들을 출력
print(porche.color, porche.price)
porche.take_off()
## Car 클래스를 상속받았기 때문에 wheels의 속성을 사용가능하다.
porche.wheels
## __str__ 메소드가 인스턴스를 받아 리턴해주는 것을 출력해준다. //출력 : '포르쉐'
print(porche)
## class안의 모든 property를 보여줌
# print(dir(Car))
## instance 생성
ferrari = Car()
## **kwargs는 인자를받아 딕셔너리로 전달하는데 위에서 get함수를 사용해 defualt로 color:black, price: $20을 주었다.
## 따라서 defualt값을 출력할 것이다.
print(ferrari.color, ferrari.price)
## //출력 : '페라리'
print(ferrari)