파이썬 클래스
함수와 변수를 모아놓은 것. 변수는 '멤버 변수', 함수는 '메소드'라고 부름
클래스는 프로그램의 청사진이라고 보면 되며, 이 청사진을 활용해 실제 사용할 수 있는 인스턴스라는 부품을 만들어 사용하게 된다. 클래스는 빵틀, 인스턴스는 빵이라고 비유할 수 있다.
생성하는 방법은 일반 함수 작성법과 동일.
[형식]
class 클래스 이름:
변수1
변수2
.....필요한만큼 변수 제공...
def 메소드1(인수):
...메소드 처리...
def 메소드2(인수):
...메소드 처리...
... 필요한만큼 메소드 제공...
[예시]
class Person: # "Person" 이라는 클래스 생성
name = "jm" # 멤버 변수의 이름을 저장하는 "name" 변수 생성
def say_hello(self): # say_hello라는 메소드 생성
print("Hello, " + self.name)
jm = Person() # "jm" 이라는 인스턴스 생성
tm = Person()
jm.say_hello()
tm.say_hello()
>>> Hello, jm
>>> Hello, jm
위와 같이 클래스를 생성하면 모든 인스턴스의 인사 결과가 동일하게 출력된다. 인스턴스를 생성할 때 기존의 클래스에서 사용한 변수 값을 그대로 가져오기 때문인데, 이 문제는 클래스를 생성할 때 초기값을 지정할 수 있는 생성자 함수를 삽입함으로써 해결할 수 있다. 생성자 함수는 인스턴트를 만들 때 자동으로 호출되며, 인스턴스를 초기화하여 필요한 값을 처음부터 설정할 수 있다.
[예시]
class Person: # "Person" 이라는 클래스 생성
name = ""
# 변수를 초기화하기 위해 "__init__" 생성자함수 사용
def __init__(self, name):
self.name = name
def say_hello(self): # say_hello라는 메소드 생성
print("Hello, " + self.name)
jm = Person("jm") # "jm"을 인자로 가진 인스턴스 생성
tm = Person("tm") # "tm"을 인자로 가진 인스턴스 생성
jm.say_hello()
tm.say_hello()
>>> Hello, jm
>>> Hello, tm
클래스 내에서 메소드를 생성할 때 인자(arguments)의 첫 번째 꼭 들어가야하는 것이 있는데, 바로 self
다. 이 self
는 인스턴스 자신을 가리키는 것으로,인스턴스에 저장되어 있는 멤버 변수에 접근 가능하게 한다. 다만 위의 jm.say_hello()
처럼 메소드를 실행할 때 인자 자리에 self
가 안들어가는 이유는 메소드의 첫번째 인수로 전달되는 '인스턴트 자신'의 값은 Python 시스템에 의해 자동으로 넘어가게 되기 때문이다. 그러므로 메소드를 호출할 때는 두 번째 인수부터 작성한다.
상속이란 이미 만들어진 클래스를 통째로 이어 받아 새로운 클래스를 만드는 기능이다. 클래스의 가장 큰 장점 중 하나는 재사용이 가능하다라는 것인데, 상속은 이를 더 강화하는 역할을 한다.
[예시]
class Person: # "Person" 이라는 클래스 생성
name = ""
# 변수를 초기화하기 위해 "__init__" 생성자함수 사용
def __init__(self, name):
self.name = name
def say_hello(self): # say_hello라는 메소드 생성
print("Hello, " + self.name)
class AcademyPerson(Person): # Person을 상속받은 AcademyPerson 클래스 생성
school = "" # name은 Person에서 상속받으므로, school 변수만 생성
def __init__(self, name, school):
self.name = name
self.school = school
def say_school(self):
print("My school is " + self.school)
jm = AcademyPerson("jm","wecode")
jm.say_hello() # Person에 있는 메소드를 그대로 사용 가능
jm.say_school()
>>> Hello, jm
>>> My school is wecode
Person
을 상속받은 AcademyPerson
은 Person
의 변수, 메소드를 모두 가지게 된다. 그러므로 기존에 있던 name
을 제외한 school
변수만 새로 정의하고 나머지 부분을 작성한다.
참고 사이트
[Python] 클래스 사용 - https://araikuma.tistory.com/371