Python-class

DONGHYUN KOO·2020년 8월 23일
0

python

목록 보기
15/19
post-thumbnail

Class 정의 하기

class ClassName:
...class 내용 코드들

참고로 class 이름은 각 단어의 앞글자를 대문자로 사용합니다.

  • ScotchWishkey
  • SomeReallyLongClassName

Car class는 다음처럼 정의 할 수 있습니다.

class Car:
pass

class가 정의되면, class로 부터 실체화(instantiate) 할 수 있습니다. 클래스를 실체화 하는 방법은 간단합니다. 다음과 같이 함수를 호출 하듯이 클래스도 호출 하면 됩니다.

hyundai = Car()
bmw = Car()
Car class를 실체(instance)화 한것이 hyundai와 bmw라는 객체(object) 인것입니다.

Class의 attribute(속성)

class에 정의되는 공통 요소들을 전문어로 class의 attribute(성질 혹은 속성) 이라고 합니다.
모든 자동차는 다음과 같은 공통 요소를 가지고 있습니다.

  • Maker (현대, BMW 등)
  • 모델명 (BMW305, 제네시스 등)
  • 마력 (horse power)

위 3개의 속성들을 class에서 정의하기 위해서는 다음과 같이 init 함수를 통해서 정의 해주면 됩니다.
(참고로 class 안에서 정의해주는 함수(function)는 function이라고 하지 않고 method 라고 합니다)

class Car:
    def __init__(self, maker, model, horse_power):
        self.maker       = maker
        self.model       = model
        self.horse_power = horse_power

먼저 init 메소드의 이름을 자세히 보겠습니다. init 이라는 단어의 앞 뒤에 밑줄 2개가 있습니다.
이렇게 앞뒤로 밑줄 2개가 있는 메소드들을 special methods라고 합니다. 이들은 특별 취급을 받습니다.
그 중 init 메소드는 class가 실체화 될때 사용되는 함수 입니다.

  • init 메소드는 클래스가 실체화 될때 자동으로 호출이 된다.
  • init 메소드의 self 파라미터는 클래스가 실체화된 객체를 넘겨주어야 하며, 파이썬이 자동으로 넘겨준다.
  • init 메소드의 self 파라미터는 항상 정의되어야 있어야 하며 맨 처음 파라미터로 정의 되어야 한다 (그래야 파이썬이 알아서 넘겨줄 수 있으므로)

```class Car:
    def __init__(self, maker, model, horse_power):
        self.maker       = maker
        self.model       = model
        self.horse_power = horse_power

Class Method

클래스에서 init 말고도 다른 메소드를 원하는 대로 추가할 수 있습니다.
Method와 attribute(속성)의 차이는 명사와 동사의 차이라고 생각하시면 됩니다.
속성은 해당 객체의 이름 등의 정해진 성질인 반면에 메소드는 move, eat 등 객체가 행할 수 있는 어떠한 action같은 느낌이라고 생각할 수 있습니다.

그럼 자동차가 할 수 있는 action은 무엇이 있을까요?
움직이기, 멈추기, 경적 울리기 등이 있을 수 있습니다.

그럼 "경적 울리기"를 메소드로 추가해 보겠습니다.

class Car:
    def __init__(self, maker, model, horse_power):
        self.maker       = maker
        self.model       = model
        self.horse_power = horse_power
    def honk(self):
        return "빠라바라빠라밤"

honk 메소드에도 self 가 들어가 있는걸 볼 수 있습니다.
모든 메소드에는 self 파라미터가 첫번째 파라미터로 들어가야 합니다.

honk 함수는 다음 처럼 사용할 수 있습니다.

hyundai = Car("현대", "제네시스", 500)
hyundai.honk()
"빠라바라빠라밤"

이렇게 객체에서 메소드를 사용할때는 dot(.) 을 사용하여 객체를 호출 합니다. 즉 <객체>.<메소드> 이를 dot notation 이라고 합니다.

자, 근데 이제 우리나라 법이 바뀌어서 모든 차는 경적소리에 해당 차의 회사명이 들어가야 한다고 합시다.
예를 들어, 현대차이 경적소리에는 "현대 빠라바라빠라밤" 이라고 나야 합니다.

근데 honk 메소드에서 해당 객체의 회사 정보를 어떻게 알 수 있을까요?
다행히도 init 메소드에서 self 객체에 해당 정보들을 저장해 놓았기 때문에 다음처럼 사용하면 됩니다

class Car:
    def __init__(self, maker, model, horse_power):
        self.maker       = maker
        self.model       = model
        self.horse_power = horse_power
    def honk(self):
        return f"{self.maker} 빠라바라빠라밤"
```hyundai = Car("현대", "제네시스", 500)
hyundai.honk()
"현대 빠라바라빠라밤"

0개의 댓글