클래스란 무엇인가?
함수는 특정 기능을 수행하도록 만들어 놓은 것이라 한다면 클래스는 조금더 큰 개념이라고 할 수 있다.
클래스 안에는 다양한 유형의 정보가 담겨 있고, 우리가 자료형과 어떻게 상호작용할 것인지 적혀 있다.
클래스는 class 키워드를 사용해서 정의하면 된다.
class Test_class:
pass
인스턴스 생성하기 (Instantiation)
- 클래스를 정의하고 나면 그걸 불러와서 사용하는 방법
test_1 = Test_class()
클래스 이름에 괄호를 추가하여 인스턴스를 만들고, 그걸 변수 test_1에 할당하는 방식이다.
인스턴스를 불러온다는 건 클래스를 가져와 객체로 바꿔준다는 건데, type() 함수를 사용하는 건 그 반대라고 생각하면 된다. 객체의 type을 확인해보면 해당 객체가 어떤 클래스의 인스턴스인지를 확인할 수 있다.
print(type(test_1))
# __main__.Test_class
클래스 변수 (Class Variables)
클래스를 정의할 때 그 안에서 변수를 정의하면 모든 인스턴스에서 동일한 데이터를 사용할 수 있다.
이를 클래스 변수라고 부르는데, 이렇게 정의된 클래스 변수는 object.variable 구문을 사용하여 액세스 할 수 있다.
class Tvshow:
title = '제목'
Tvshow 라는 클래스 안에 title이라는 변수를 정의했다.
각각 다른 인스턴스를 호출하더라도 각 인스턴스 안에 있는 title이라는 변수는 언제나 똑같다.
drama = Tvshow()
entertain = Tvshow()
print(drama.title)
print(entertain.title)
# 제목
# 제목
매서드 (Methods)
- 클래스 안에서 정의된 함수
class Circle():
pi = 3.14
def area(self, radius):
return self.pi * radius**2
circle = Circle()
circle_1 = circle.area(3) # 28.26
circle_2 = circle.area(5) # 78.5
Circle이라는 클래스에서 π(pi) 값은 3.14로 넣어주고, 원의 넓이 구하는 공식을 area라는 메서드로 정의했다.
원의 넓이는 π * 반지름²이다. 그리고 메서드를 정의할 때 반지름을 인수로 받아야 하기 때문에 area의 인수로 self와 radius를 넣어줬다. (메서드의 첫 번째 인수는 언제나 self다. )
생성자 (Constructor)
- 클래스를 호출할 때 자동으로 어떤 함수를 실행하거나 값을 호출하고 싶을 때 정의
메서드 이름으로 __init__을 사용하면 된다.
class Unit:
def __init__(self, name, hp, damage):
self.name = name
self.hp = hp
self.damage = damage
print(f'{self.name} 챔피언이 소환사의 협곡에 참여했습니다.')
print(f'체력 {self.hp}, 공격력 {self.damage}')
Jin = Unit("진", 550, 70)
Unit라는 클래스를 객체로 불러올 때마다 Unit에 들어있는 name, hp, damage 값이 들어가 있는
name(진) 챔피언이 소환사의 협곡에 참여했습니다.
체력 hp(550), 공격력 damage(70)
라는 문자열이 즉시 출력된다.
인스턴스 변수 (Instance Variables)
객체를 구별해서 인스턴스를 생성하는 이유는 각 인스턴스가 다른 종류의 데이터, 즉 인스턴스 변수를 보유할 수 있기 때문이다.
이렇게 각 객체가 보유한 데이터인 인스턴스 변수는 해당 클래스의 모든 인스턴스가 공유하는 게 아니다. (이게 클래스 변수와의 가장 큰 차이점이다.)
Yuumi_2 = Unit("유미", 300, 10)
Yuumi_2.impossible_to_attack = True
if Yuumi_2.impossible_to_attack == True:
print(f"{Yuumi_2.name} 은(는) 현재 서포팅 상태입니다.")
Yuumi_2 라는 객체에 impossible_to_attack라는 인스턴스 변수 True값을 넣어주어 조건문에 맞으면 print문을 실행해준다.
인스턴스 변수의 활용, self
인스턴스를 생성할 때 작동하는 생성자(constructor)를 활용해서 인스턴스 변수를 생성하고 관리하면 너무나 편리하기 때문이다.
class AutoEmail:
intro = "안녕하세요"
def __init__(self, name):
self.name = name
def say_hello(self):
return "{intro} {name} 님".format(intro=self.intro, name=self.name)
mail_to_park = AutoEmail("PARK")
mail_to_kim = AutoEmail("KIM")
print(mail_to_park.say_hello())
# "안녕하세요 PARK 님"
print(mail_to_kim.say_hello())
# "안녕하세요 KIM 님"
'DL(Deep-Learning) > Python 기초' 카테고리의 다른 글
[Python] 예외처리 (0) | 2022.01.26 |
---|---|
[Python] 클래스 Class 2 (0) | 2022.01.26 |
[python] 함수 Function (0) | 2022.01.26 |
[코드라이언] 번역하기 (0) | 2022.01.26 |
[코드라이언] 날씨 정보 받아오기 (0) | 2022.01.26 |