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