파이썬 클래스 문법 (python class)

김승환·2021년 7월 16일
0

딥러닝공부

목록 보기
4/17

파이썬 클래스 문법을 확인하려고 합니다.

  • 딥러닝을 위해 효율적으로 코딩을 하려면 class를 잘 해야한다고 합니다.(저도 못함;;)
  • class엔 어떤 특성이 있는지 확인해 보아요

class의 문법은 파이썬 코딩을 조금 해보신 분들이라면 다 보셨을 것 같습니다.

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

클래스에는 속성과 동작이 있습니다.

  • 속성은 변수로 표현을 하고, 동작은 def라는 함수를 사용합니다.
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 Car를 사용할 때 color와 category를 직접 설정하고 싶을 수 있습니다.

  • 위 예제에서는 class함수에 직접 입력함으로써 color와 category는 외부에서 수정할 수 있는지는 모르겠지만 건드리지 않았습니다.
  • 하지만 def라는 함수에 넣어주면 class car를 사용할 때 매번 다른 값을 넣어 사용할 수 있습니다

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

profile
인공지능 파이팅!

0개의 댓글