• Home
  • About
    • HSC-1 photo

      HSC-1

      github blog

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Category

클래스

03 Feb 2021

Reading time ~3 minutes

클래스

음 저번 Python 포스트에서 함수정의(def)에 대해 조금 써놨었는데,
함수정의는 동작에 대해 정의하여 다시 쓰기 편하게 하기 위해서 씁니다.
Class도 똑같이 속성에 대해 정의하여 같은 속성을 가지게 만들 수 있고 그 class안에 함수정의들도 쓸 수 있습니다.
예시로 아래 Gun이라는 클래스는 카테고리와, 총알의크기라는 속성을 부여해 줍니다.
위력(power)는 장탄수와 화약량을 곱한다고 가정했습니다.

class Gun:
    category = "Pistol"
    bullet = "9mm"
    def power(self,ammunition,gunpowder = 100):
        power = ammunition*gunpowder
        return power

power에서 self는 뒤에 가서 설명하겠습니다.바로보기
여기서 a와b총이 장탄수가 각각 5,10발이라고 가정하였고, a와b 둘다 총이라는 속성을 부여해 봤습니다.

a = Gun()
b = Gun()

엄청 간단하게 속성이 입력되었고,이제 파워를 구해보면 아래와 같이 나옵니다.

a.power(5)
>>> 500
b.power(10)
>>> 1000

여기서 저는 클래스인 Gun에 바로 ammunition(장탄수)을 넣어 속성을 부여하고 싶습니다.

생성자(__init__)

class Gun:
    def __init__(self,ammunition,category="Pistol",bullet="9mm"):
        self.category = category
        self.bullet = bullet
        self.ammunition = ammunition

    def power(self,gunpowder = 100):
        power = self.ammunition*gunpowder
        return power
a = Gun(5)
>>> 500
b = Gun(10)
>>> 1000

생성자라고 부르는 특수 함수라고 이해했습니다. 역할로는 클래스의 초기화와 초기 속성를 정의하는 것으로 위의 예시에서 클래스 Gun에 장탄수를 바로 받을 수 있도록 했습니다.

self

이제 self가 어떤 역할을 하는지 보겠습니다. 클래스 안에 있는 함수정의(def)를 할 때 함수의 첫 인자로 인스턴스 객체(예제에서는 a나b)를 전달해줍니다. 다시 말하면 a.power()를 Gun.power(a)로 인식 시키기 위해 self라고 표시를 해준 것입니다.
그래서 self말고 다른 것으로 써도 전달해주는데 다음 코드같이 아무 지장이 없습니다.

class Gun:
    def __init__(self,ammunition,category="Pistol",bullet="9mm"):
        self.category = category
        self.bullet = bullet
        self.ammunition = ammunition

    def power(AMUGEONA,gunpowder = 100):
        power = self.ammunition*gunpowder
        return power
a = Gun(5)
>>> 500
b = Gun(10)
>>> 1000

그러면 ‘self.뭐시기’를 한 것은 뭘까요?

저번에 함수정의에서 말한 함수안에서 함수안의 인자만 쓴다고 했는데 ‘self.뭐시기’는 그것을 class안의 범위로 확장시키는 것입니다.
위 코드예시에서는 __init__에서 장탄수(ammunition)를 받아서 self.ammunition에 ammunition를 저장하였습니다.
self.ammunition은 이제 클래스Gun에서 쓸 수 있는 인자입니다. 그 덕에 power()에서도 쓸 수 있습니다.
이 ‘self.뭐시기’ 역시 self말고 다른 것을 써도 됩니다.
아래 예시에서는 ‘a.뭐시기’로 바꾸어 보았습니다.

class Gun:
    def __init__(a,ammunition,category="Pistol",bullet="9mm"):
        a.category = category
        a.bullet = bullet
        a.ammunition = ammunition

    def power(AMUGEONA,gunpowder = 100):
        power = a.ammunition*gunpowder
        return power
a = Gun(5)
>>> 500
b = Gun(10)
>>> 1000

참고링크
파이썬 문서



aiffelpython Share Tweet +1