ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 추상 메소드 예제
    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

     

    댓글

Designed by Tistory.