[Python] OOP-1 . 클래스 기본
1) Car 클래스 정의
class Car:
color = ""
speed = 0
def upSpeed(self, value):
self.speed += value
def downSpeed(self, value):
self.speed -= value
(위 코드는 run 해도 아무것도 출력 되지 않는다. 단지, Car 클래스의 설계도이다. (== 붕어빵 틀) )
먼저 self 에 대해서 알아보자 (java 에서 this와 동일)
self는 클래스 자기 자신의 주소를 가지고 있는데, self.speed 는 speed 를 의미한다.
즉, 자신의 클래스에 있는 speed 맴버변수(필드) 라고 해석하면 된다.
self는 객체를 생성해야 활성화된다.
class 에는 메서드나 멤버변수(필드)는 얼마든지 추가, 삭제 가능하다.
(현재, 위에 코드는 2개의 변수와 2개의 메서드가 존재)
예를들면, door 갯수, 바퀴 갯수 등등
2) 인스턴스 생성 (instance)
위에 설계도 (class)를 기반으로 실제 자동차를 제작하게되는데, 이 실제 생산되는 자동차를 인스턴스 라고한다.
(인스턴스를 객체라고 일단 동일화 해 놓음)
- 자동차 세 대의 인스턴스를 생성하는 코드
myCar1 = Car()
myCar2 = Car()
myCar3 = Car()
3) 필드에 값 대입
인스턴스가 생성되면, 각 자동차(인스턴스)는 독립적인 메모리 공간을 차지하게 된다.
즉, 그말은 각 인스턴스에는 별도의 필드가 존재하며 아래와 같이 각각의 별도의 값을 대입할 수 있다.
myCar1.color = "red"
myCar1.speed = 0
myCar2.color = "blue"
myCar2.speed = 0
myCar3.color = "yellow"
myCar3.speed = 0
4) 메서드 호출
- Car 클래스에서 upSpeed() 와 downSpeed() 메서드를 만들었는데, 이 메서드들도 각 인스턴스들이 가지고 있다고 보면된다.
호출은 아래와 같이 하면된다.
myCar1.upSpeed(30) #참조변수.멤버변수
myCar2.downSpeed(60) #참조변수.멤버메서드()
코드해석 : myCar1은 속도 30 증가, myCar2는 속도 60 감소
Car 클래스의 분석
클래스 실행시 아래와 같이
if __name__ == "__main__":
구문 안에서 객체를 만들어 주면된다.
class Car:
color = ""
speed = 0
def upSpeed(self, value):
self.speed += value
def downSpeed(self, value):
self.speed -= value
def printFields(self, myCar):
print("%s의 색상 : %s, 속도 : %dkm" % (myCar, self.color, self.speed))
if __name__ =="__main__":
myCar1 = Car()
myCar2 = Car()
myCar3 = Car()
print("myCar1의 주소 : ", id(myCar1))
print("myCar1의 타입 : ", type(myCar1))
# myCar1.color = "red"
# myCar1.speed = 0
# myCar2.color = "blue"
# myCar2.speed = 0
# myCar3.color = "yellow"
# myCar3.speed = 0
# myCar1.upSpeed(30) #참조변수.멤버변수
# myCar2.downSpeed(60) #참조변수.멤버메서드()
#
# print("자동차 1의 색상은 %s 이며, 현재 속도는 %d km 입니다." %(myCar1.color, myCar1.speed))
myCar1.color = "blue"
myCar1.upSpeed(50)
myCar1.printFields("myCar1")
출처 : 파이썬(Python) 기초부터 실무까지 part.4