여러 개의 클래스에서 공통점을 묶어 하나의 부모 클래스로부터 상속을 받도록 한 뒤, 그 공통점들에 대해 자식 클래스들에게 오버라이딩을 강제할 때, 그 부모 클래스를 추상 클래스라고 한다.
파이썬에서 어떤 클래스를 추상 클래스로 만들기 위한 코드는 아래와 같다. (ABC == abstract base class)
from abc import ABC, abstractmethod
class Shape(ABC):
"""도형 클래스"""
@abstractmethod
def area(self):
pass
@abstractmethod
def perimeter(self):
pass
ABC 클래스를 상속 받고 + 추상 메소드를 하나 이상 가지고 있는 클래스는 추상 클래스가 되고, 그것의 자식 클래스들은 추상 클래스의 추상 메소드들(@abstractmethod를 적은 메소드)에 대해 오버라이딩 의무가 생긴다.
주의: 대신 추상 클래스 자체의 인스턴스를 생성할 수는 없다. -> 이 성질로 오버라이딩을 강제할 수 있는 것
만약 추상 클래스로부터 상속받은 클래스가 추상 메소드들에 대해 오버라이딩하지 않았다면 그 클래스는 ABC 클래스를 상속 받고 + 추상 메소드를 하나 이상 가지고 있기 때문에 추상 클래스가 되어 인스턴스를 생성할 때 오류가 나게 된다.
- 옵셔널 파라미터 (예전 시간에 다뤘다)
- 파라미터 이름 명시
- 개수가 확정되지 않은 파라미터
먼저 파라미터 이름 명시라고 함은
def personal_info(name, age, email, password):
print("내 이름은 {}이고 나이는 {}살, 이메일은 {}이고 비밀번호는 {}야".format(name, age, email, password))
personal_info(password="1234", email="[email protected]", age=22, name="Diego")
이런 식으로 함수 정의 과정에서 설정한 파라미터의 순서를 지키지 않아도 파라미터의 이름을 명시해 주었다면 상관이 없다는 뜻이다.
다음으로 개수가 확정되지 않은 파라미터는 아래와 같다.
def sumof_price(name, *price):
print("{}: {}원".format(name, sum(price)))
sumof_price("철용", 2500, 11900, 5600)
실행결과:
철용: 20000원
위에서 *price 파라미터를 적어준 뒤 함수를 호출할 때 파라미터로 여러 개가 들어가는데 그것들이 price라는 이름의 튜플 안에 저장된다. 따라서 sum 함수를 쓸 수 있는 것이다.