python class 기초 정리

jomminii_before·2020년 1월 9일
0

파이썬 클래스

class(클래스)란

함수와 변수를 모아놓은 것. 변수는 '멤버 변수', 함수는 '메소드'라고 부름
클래스는 프로그램의 청사진이라고 보면 되며, 이 청사진을 활용해 실제 사용할 수 있는 인스턴스라는 부품을 만들어 사용하게 된다. 클래스는 빵틀, 인스턴스는 빵이라고 비유할 수 있다.

class 생성

생성하는 방법은 일반 함수 작성법과 동일.

 [형식]
  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

self와 인스턴스

클래스 내에서 메소드를 생성할 때 인자(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을 상속받은 AcademyPersonPerson의 변수, 메소드를 모두 가지게 된다. 그러므로 기존에 있던 name을 제외한 school 변수만 새로 정의하고 나머지 부분을 작성한다.

참고 사이트
[Python] 클래스 사용 - https://araikuma.tistory.com/371

profile
https://velog.io/@jomminii 로 이동했습니다.

0개의 댓글