Introduction to Python Abstract Classes
- 객체 지향 프로그래밍에서 추상 클래스는 인스턴스화할 수 없는 클래스 입니다. 그러나 추상 클래스를 상속하는 클래스를 만들 수 있습니다.
- 일반적으로 추상 클래스를 사용하여 다른 클래스에 대한 청사진을 만듭니다.
- 마찬가지로 추상 메서드는 구현이 없는 메서드입니다.
- 추상 클래스는 추상 메서드를 포함하거나 포함하지 않을 수 있습니다.
Python은 추상 클래스를 직접 지원하지 않습니다. 그러나 추상 클래스를 정의할 수 있는 모듈을 제공합니다 .
추상 클래스를 정의하려면 abc(추상 기본 클래스) 모듈을 사용합니다.
이 abc모듈은 추상 기본 클래스를 정의하기 위한 인프라를 제공합니다.
from abc import ABC
class AbstractClassName(ABC):
pass
추상 메서드를 정의하려면 @abstractmethod데코레이터를 사용합니다.
from abc import ABC, abstractmethod
class AbstractClassName(ABC):
@abstractmethod
def abstract_method_name(self):
pass
Python abstract class example
회사의 급여 프로그램을 개발해야 한다고 가정합니다.
회사에는 정규 직원과 시간제 직원의 두 그룹의 직원이 있습니다. 풀 타임 직원은 고정 급여를 받고 시간당 직원은 서비스에 대한 시간당 급여를받습니다.
급여 프로그램은 직원 이름과 월 급여가 포함된 급여를 인쇄해야 합니다.
Employee 급여 프로그램을 모델링하기 위해, FulltimeEmployee, HourlyEmployee,Payroll 같은 클래스를 만들 수 있습니다.
프로그램을 구조화하기 위해 각 클래스가 별도의 모듈(파일)에 배치하여 사용합니다.
The Employee class
employee.py
from abc import ABC, abstractmethod
class Employee(ABC):
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
@property
def full_name(self):
return f"{self.first_name} {self.last_name}"
@abstractmethod
def get_salary(self):
pass
The FulltimeEmployee class
fulltimeemployee.py
class FulltimeEmployee(Employee):
def __init__(self, first_name, last_name, salary):
super().__init__(first_name, last_name)
self.salary = salary
def get_salary(self):
return self.salary
The HourlyEmployee class
hourlyemployee.py
class HourlyEmployee(Employee):
def __init__(self, first_name, last_name, worked_hours, rate):
super().__init__(first_name, last_name)
self.worked_hours = worked_hours
self.rate = rate
def get_salary(self):
return self.worked_hours * self.rate
The Payroll class
payroll.py
class Payroll:
def __init__(self):
self.employee_list = []
def add(self, employee):
self.employee_list.append(employee)
def print(self):
for e in self.employee_list:
print(f"{e.full_name} \t ${e.get_salary()}")
The main program
app.py
from fulltimeemployee import FulltimeEmployee
from hourlyemployee import HourlyEmployee
from payroll import Payroll
payroll = Payroll()
payroll.add(FulltimeEmployee('John', 'Doe', 6000))
payroll.add(FulltimeEmployee('Jane', 'Doe', 6500))
payroll.add(HourlyEmployee('Jenifer', 'Smith', 200, 50))
payroll.add(HourlyEmployee('David', 'Wilson', 150, 100))
payroll.add(HourlyEmployee('Kevin', 'Miller', 100, 150))
payroll.print()
Output:
John Doe $6000
Jane Doe $6500
Jenifer Smith $10000
David Wilson $15000
Kevin Miller $15000
추상 클래스를 사용하는 경우
실제로 추상 클래스를 사용하여 밀접하게 관련된 여러 클래스 간에 코드를 공유합니다. 급여 프로그램에서 Employee클래스의 모든 하위 클래스는 동일한 full_name속성을 공유합니다.
Summary
- 추상 클래스는 인스턴스를 만들 수 없는 클래스입니다.
- abc 모듈을 사용하여 추상 클래스를 정의하십시오.
'Python Object-oriented Programming' 카테고리의 다른 글
Metaclass (0) | 2023.04.01 |
---|---|
type Class (0) | 2023.04.01 |
super() Method (0) | 2023.03.31 |
Static Methods (0) | 2023.03.31 |
__new__() Method (0) | 2023.03.31 |
댓글