Summary

  • 클래스는 객체를 표현하기 위한 문법으로, 속성(데이터)과 메서드(동작)로 구성된다
  • __init__(self)에서 클래스 내부에서 쓸 변수를 설정하며, self는 인스턴스 자신을 가리킨다
  • 상속으로 부모 클래스의 변수·메서드를 물려받고, 오버라이딩으로 재정의할 수 있다

클래스란

클래스는 객체(object)를 표현하기 위한 문법이다. list, dict 등도 모두 각자의 용도에 맞게 만들어진 클래스다. 클래스는 크게 속성과 메서드로 구분되는데, 속성은 사용할 값을 정의하고 메서드는 그 속성으로 어떤 동작을 하는 실행 코드다.

게임의 직업에 비유하면, 각 직업(전사·마법사)이 클래스이고 그 안의 힘·민첩 같은 값이 속성, 찌르기·파이어볼 같은 동작이 메서드다.


생성

클래스 이름 규칙

  • 대문자로 시작한다
  • 단어와 단어 사이 연결도 대문자로 한다 (예: FourCalculation)

클래스 내부에서 쓸 변수를 설정하려면 __init__(self)를 활용한다. self는 해당 클래스에서 사용되는 인스턴스 자신을 가리킨다. 아래 예시는 first, second를 입력받아 사칙연산 메서드를 제공한다.

class FourCalculation:
    """A class for four arithmetic calculation"""
 
    def __init__(self, first, second):
        self.first = first
        self.second = second
 
        if second == 0:
            raise ValueError('the number must NOT be zero')
 
    def add(self):
        return self.first + self.second
 
    def mul(self):
        return self.first * self.second
 
    def sub(self):
        return self.first - self.second
 
    def div(self):
        return self.first / self.second

사용

.py 파일에서 클래스를 임포트하고, 객체에 값을 입력한 뒤 메서드로 계산한다.

from fourcalculation import FourCalculation
 
b = FourCalculation(19, 8)
print(b.add(), b.mul(), b.sub(), b.div())

상속

SuperClass와 SubClass

  • SuperClass: 부모 클래스
  • SubClass: 자식 클래스. 부모 클래스를 상속받아 그 변수·메서드를 사용하며, 확장·구체화할 때 쓴다

부모 클래스를 상속하면 그 변수·메서드를 모두 물려받으며, 필요하면 오버라이딩(overriding)으로 재정의한다. super().__init__(...)로 부모의 변수를 활용하고, 새 변수는 따로 설정한다.

from fourcalculation import FourCalculation
 
class FiveCalculation(FourCalculation):
    """Adding power calculation"""
 
    def __init__(self, first, second, third):
        super().__init__(first, second)
        self.third = third
 
    def pow(self):
        return self.first ** self.second + self.third
 
    def div(self):   # Method overriding
        if self.second == 0:
            return 0
        else:
            return self.first / self.second
c = FiveCalculation(4, 2, 3)
print(c.pow(), c.add(), c.sub())

부모의 메서드도 상속받아 자식에서 호출할 수 있다. 아래 EmployeePersonName()을 상속받아 GetEmployee() 안에서 사용한다.

class Person:
    def __init__(self, first, last):
        self.firstname = first
        self.lastname = last
 
    def Name(self):
        return self.firstname + " " + self.lastname
 
class Employee(Person):
    def __init__(self, first, last, staffnum):
        Person.__init__(self, first, last)
        self.staffnumber = staffnum
 
    def GetEmployee(self):
        return self.Name() + "," + self.staffnumber

Reference