클래스
객체지향 프로그래밍에서 모든 데이터를 객체로 취급하고 이 객체가 프로그램의 중심이 된다.
이 때 객체의 구성요소 중 가장 중요한 개념이 클래스이다.
기본 예제
class Car : #클래스 생성
color=""
speed=0
def upSpeed(self, value):
self.speed+=value
def downSpeed(self, value):
self.speed-=value
##메인 코드 부분##
myCar1 = Car() #객체(인스턴스) 생성
myCar1.color = '빨강'
myCar1.speed = 0
myCar1.upSpeed(30)
'Car'라는 클래스를 생성한다.
내부에 color와 speed 변수를 생성하고 'upSpeed'와 'downSpeed'라는 함수를 생성한다.
self는 클래스 내부의 변수를 의미한다.
생성자
class Car:
color = "" #인스턴스 변수
speed = 0 #인스턴스 변수
count = 0 #클래스 변수
def __init__(self, value1, value2):
self.color = '빨강'
self.speed = 0
Car.count+=1
##메인 코드 부분##
myCar1 = Car('빨강', 30)
myCar2 = Car('파랑', 60)
'__init__()'은 생성자로 인스턴스를 생성하면 무조건 호출되는 메서드이다.
위의 생성자는 'value1', 'value2' 라는 매개변수가 있는 생성자이다.
클래스 변수는 호출될 때마다 초기화되는 인스턴스 변수와 다르게 값이 누적, 저장된다.
상속
기존 클래스에 있는 필드와 메서드를 그대로 물려받는 새로운 클래스를 만드는 것
class Car :
speed = 0
def upSpeed(self, value) :
self.speed += value
print("현재 속도(슈퍼클래스) : %d" %self.speed)
class Sedan(Car) : #상속
def upSpeed(self, value) :
self.speed += value
if self.speed > 150 :
self.speed = 150
print("현재 속도(서브클래스) : %d" %self.speed)
class Truck(Car) :
pass
##변수 선언 부분##
sedan, truck1 = None, None
##메인 코드 부분##
truck = Truck()
sedan = Sedan()
print("트럭 --> ", end = "")
truck.upSpeed(200)
print("승용차 --> ", end = "")
sedan.upSpeed(200)
Sedan 클래스는 Car를 상속받아 upSpeed 메소드를 오버라이드한다.
Truck 클래스는 Car를 상속받아 Car의 upSpeed 메소드를 호출한다.