클래스
음 저번 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
참고링크
파이썬 문서