Python
추상 메소드 예제
코딩탕탕
2022. 10. 22. 17:15
예제 1) 추상 클래스를 이용한 상속 연습문제
선생님의 코드
from abc import *
class Employee(metaclass = ABCMeta):
def __init__(self, irum, nai):
self.irum = irum
self.nai = nai
@abstractmethod
def pay(self):
pass
@abstractmethod
def data_print(self):
pass
def irumnai_print(self):
print('이름 : ' + self.irum + ', 나이 : ' + str(self.nai), end=' ')
class Temporary(Employee):
def __init__(self, irum, nai, ilsu, ildang):
Employee.__init__(self, irum, nai)
self.ilsu = ilsu;
self.ildang = ildang;
def pay(self):
return self.ilsu * self.ildang
def data_print(self):
self.irumnai_print();
print(', 월급 : ' + str(self.pay()))
class Regular(Employee):
def __init__(self, irum, nai, salary):
super().__init__(irum, nai)
self.salary = salary
def pay(self):
return self.salary
def data_print(self):
self.irumnai_print();
print(', 급여 : ' + str(self.pay()))
class Salesman(Regular):
def __init__(self, irum, nai, salary, sales, commission):
super().__init__(irum, nai, salary)
self.sales = sales;
self.commission = commission
def pay(self):
return super().pay() + (self.sales * self.commission)
def data_print(self):
self.irumnai_print();
print(', 수령액 : ' + str(round(self.pay())))
t = Temporary('홍길동', 25, 20, 150000);
r = Regular('한국인', 27, 3500000)
s = Salesman('손오공', 29, 1200000, 5000000, 0.25)
t.data_print(); r.data_print(); s.data_print()
<console>
이름 : 홍길동 , 나이 : 25 월급 : 300000
이름 : 한국인 , 나이 : 27 월급 : 3500000
이름 : 손오공 , 나이 : 29 수령액 : 2450000
작성자의 코드
from abc import *
class Employee(metaclass = ABCMeta):
irum = '이름'
nai = '나이'
@abstractmethod
def pay(self): # 추상 메소드가 됨
pass
@abstractmethod
def data_print(self): # 추상 메소드가 됨
pass
def irumnai_print(self):
print('일반 메소드')
class Temporary(Employee):
ilsu = '일수'
ildang = '일당'
mon = 0
def __init__(self, irum, nai, ilsu, ildang):
self.irum = irum
self.nai = nai
self.ilsu = ilsu
self.ildang = ildang
def pay(self):
self.mon = self.ilsu * self.ildang
def data_print(self):
self.pay()
print('이름 :',self.irum, ', 나이 :',self.nai, '월급 :', self.mon)
t = Temporary('홍길동', 25, 20, 15000)
t.data_print()
class Regular(Employee):
salary = '급여'
def __init__(self, irum, nai, salary):
self.irum = irum
self.nai = nai
self.salary = salary
def pay(self):
self.salary = self.ilsu * self.ildang
def data_print(self):
print('이름 :',self.irum, ', 나이 :',self.nai, '월급 :', self.salary)
r = Regular('한국인', 27, 3500000)
r.data_print()
class Salesman(Employee):
sales = '실적'
commission = '수수료율(예: 0.25)'
da = '수령액'
def __init__(self, irum, nai, salary, sales, commission):
self.irum = irum
self.nai = nai
self.salary = salary
self.sales = sales
self.commission = commission
def pay(self):
self.da = self.salary + self.sales * self.commission
def data_print(self):
self.pay()
print('이름 :',self.irum, ', 나이 :',self.nai, '수령액 :', int(self.da))
s = Salesman('손오공', 29, 1200000, 5000000, 0.25)
s.data_print()
<console>
이름 : 홍길동 , 나이 : 25 월급 : 300000
이름 : 한국인 , 나이 : 27 월급 : 3500000
이름 : 손오공 , 나이 : 29 수령액 : 2450000