본문 바로가기

python

class - 추상 클래스 예제

필자 작성 코드

from abc import *

class Employee(metaclass = ABCMeta):

    @abstractclassmethod
    def pay(self): 
        pass
    
    @abstractclassmethod
    def data_print(self): 
        pass
    
    def irumnai_print(self):
        print('이름:{}, 나이:{}, '.format(self.irum,self.nai), end = '')
        
class Temporary(Employee):

    def __init__(self, irum, nai, ilsu, ildang):
        self.irum = irum
        self.nai = nai
        self.ilsu = ilsu
        self.ildang = ildang
    
    def pay(self):
        self.sal = self.ilsu * self.ildang
        
    def data_print(self):
        self.pay()
        super().irumnai_print()
        print('월급:{}'.format(self.sal))

class Regular(Employee):
    
    def __init__(self, irum, nai, salary):
        self.irum = irum
        self.nai = nai
        self.salary = salary
    
    def pay(self):
        pass
    
    def data_print(self):
        super().irumnai_print()
        print('급여:{}'.format(self.salary))
        
class Salesman(Employee):
    
    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.salesSal = int(self.salary + self.sales * self.commission)
    
    def data_print(self):
        self.pay()
        super().irumnai_print()
        print('수령액:{}'.format(self.salesSal))
        
if __name__ == '__main__':       
    t = Temporary('홍길동', 25, 20, 15000)
    r = Regular('한국인', 27, 3500000)
    s = Salesman('손오공',29,1200000,5000000,0.25)
    t.data_print()
    r.data_print()
    s.data_print()

이름:홍길동, 나이:25, 월급:300000
이름:한국인, 나이:27, 급여:3500000
이름:손오공, 나이:29, 수령액:2450000

 

 

선생님 코드

pay()를 리턴하는 부분

부모의 생성자를 가져와서 인자를 넘겨주는 방식을 사용한 점

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()

이름 : 홍길동, 나이 : 25 , 월급 : 3000000
이름 : 한국인, 나이 : 27 , 급여 : 3500000
이름 : 손오공, 나이 : 29 , 수령액 : 2450000

'python' 카테고리의 다른 글

file - open(), read(), close() 등  (0) 2022.10.11
예외처리 - try ~ except  (0) 2022.10.11
class - 추상클래스  (0) 2022.10.11
class - 다중 상속  (0) 2022.10.11
class - method override (재정의)  (0) 2022.10.11