class HI:
pass
class HI():
pass
정말 아무것도 안한 기본 class 문법을 만들었습니다. 저 두 문법의 차이는 ()가 있고 없고 입니다.
그 차이는 무엇이냐면 파이썬에서 컴퓨터언어?로 인식하는 값이 ()가 없을경우 동일한 값을 가지고 ()있을 경우 호출할 때마다 다른 값을 얻습니다.
#id(HI)는 ()가 없기 떄문에 같은 값!
print(id(HI))
print(id(HI))
#id(HI)는 () 있기 때문에 다른 값!
print(id(HI()))
print(id(HI()))
# ()가 있고 없고의 type을 확인!
print(type(HI))
print(type(HI()))
2655729096408
2655729096408
2655737230672
2655737230392
<class 'type'>
<class 'main.HI'>
우리가 클래스를 만들었다면 클래스를 어딘가에 소속을 시켜줘야 합니다. 예를 들면 HI라는 클래스를 사용하기 위해 x=HI() 처럼 새로 HI라는 클래스를 x에 대입시키는 것 입니다. 대입시키는 것을 인스턴스화라고 합니다.
hi = HI()
print(id(hi))
2655736682144
class Car:
color = 'red'
category = 'sports car'
def drive(self):
print("I'm driving")
def accel(self, speed_up, current_speed=10):
self.speed_up = speed_up
self.current_speed = current_speed + speed_up
print("speed up", self.speed_up, "driving at", self.current_speed)
위 함수에서 color = 'red', category = 'sports car' 는 속성입니다. def drive, def accel은 동작입니다. car 클래스를 확인해보면 color, category는 클래스 속성으로 정해져 있습니다. 우리가 이 클래스를 사용한다고 했을 때 def accel에 있는 speed_up, current_speed 정도 이겠네요!
그러면 class Car안에 있는 def accel의 speed_up과 current_speed는 어떻게 변경하는지 궁금할 수 있습니다. 예제 코드를 보여드리겠습니다.
mycar = Car()
mycar.accel(5)
mycar.accel(5,15)
speed up 5 driving at 15
speed up 5 driving at 20
Car라는 클래스를 mycar라는 변수에 인스턴스화 해주고 my.accel()을 이용하여 class Car 안에 있는 def accel을 활용할 수 있습니다. mycar.accel(5)라고 했을 경우 speed_up에 대입이 되고 current_speed에 어떤 수를 넣어주지 않으면 기본적으로 10으로 할당이 되게 함수가 정의되어있습니다. 즉 mycar.accel(5)라고 했을 땐 speed_up에 값이 대입되고 mycar.accel(5,15)라고 했을 땐 speed_up에는 5 current_speed에는 15가 들어갑니다. mycar.accel()으로 했을땐 speed_up에 디폴트값이 설정이 안됐기 때문에 당연히 작동 안합니다 ㅎㅎ
class Car2:
def __init__(self, color, category):
self.color = color
self.category = category
def drive(self):
print("I'm driving")
def accel(self, speed_up, current_speed=10):
self.speed_up = speed_up
self.current_speed = current_speed + self.speed_up
print("speed up", self.speed_up, "driving at", self.current_speed)
제가 def init 함수를 사용했습니다. 이 함수는 class Car2라는 함수가 실행이 되면 따로 .init라고 호출을 하지않아도 자동으로 실행이 됩니다.
car2 = Car2('yellow', 'sedan')
car2.color
'yellow'
class를 사용하면 참 다양한 활용방법이 있습니다. 클래스 안에 클래스를 넣을 수도 있습니다. 예시를 통해 확인해보세욥
class NewCar(Car2):
pass
car = NewCar('red','sport')
car.drive()
car.accel(10)
I'm driving
speed up 10 driving at 20
class NewCar에 Car2를 넣었습니다. NewCar는 그럼 Car2에 있는 함수들을 호출하여 사용할 수 있습니다.
이러한 점을 사용하면 class는 정말 다양하게 만들 수 있습니다. class를 왜 만드는지에 대해 궁금할 수 있습니다. 간단한 코딩의 경우 단순히 수정할 부분에 가서 수정만 하면 되지만 복잡한 코딩의 경우 하나를 수정하면 코딩전체를 수정해야하는 상황이 올 수 있습니다. 그런 불편한 과정을 해결하기 위해 class나 def함수를 이용해서 좀 더 편리한? 코딩을 하는 것이라고 생각합니다.
aiffel #인공지능교육
모두 연구소 & aiffel의 손주영님이 만들어 주셨습니다.
이메일이 없어서,,, 넣지는 못했네요.
손주영
@reisei11