Python - 11

윤기나는코딩·2023년 3월 14일
0

Python

목록 보기
13/16

추상 클래스(추상 메소드) - 자식 클래스에서 부모의 메소드의 이름을 강요하도록 함

from abc import * 

class AbstractClass(metaclass = ABCMeta): # 추상 클래스가 됨.
    
    @abstractmethod
    def myMethod(self): # 추상 메소드가 됨
        pass
    
    def normalMethod(self):
        print('추상 클래스는 일반메소드를 가질 수 있다.')
    
# parent = AbstractClass() # err - Can't instantiate abstract class

class Child1(AbstractClass):
    name = '난 Child1'
    
    def myMethod(self):
        print('Child1에서 추상 메소드에 내용을 적용')
        
c1 = Child1()
print(c1.name)
c1.myMethod()
c1.normalMethod()



print()
class Child2(AbstractClass):
    def myMethod(self):
        print('Child2에서 추상의 마법을 풀다')
        print('이제는 자유다')
        
    def normalMethod(self):
        print('추상 클래스의 일반 메소드는 오버라이딩이 선택적이다.')

    def good(self):
        print('Child2 고유 메소드')

c2 = Child2()
c2.myMethod()
c2.normalMethod()
c2.good()

print('---------------------')

imsi = c1
imsi.myMethod()
print()
imsi = c2
imsi.myMethod()

print('----------------------------------------------')

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):
        pass
    
print(' Temporary ')

class Temporary(Employee):
    def __init__(self, irum, nai , ilsu, ildang):
        self.ilsu = ilsu
        self.ildang = ildang
        Employee.__init__(self, irum, nai)
    
    def pay(self):
        return self.ilsu*self.ildang
        
    def data_print(self):
        print('이름 : {}, 나이 : {}, 월급 : {}'.format(self.irum, self.nai, 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):
        print('이름 : {}, 나이 : {}, 급여 : {}'.format(self.irum, self.nai, str(self.pay())))
        
        
class Salesman(Regular):
    def __init__(self, irum, nai, salary, sales, comission):
        super().__init__(irum, nai, salary)
        self.sales = sales
        self.comission = comission
    def pay(self):
        return super().pay() + (self.sales*self.comission)

    def data_print(self):
        print('이름 : {}, 나이 : {}, 수령액 : {}'.format(self.irum,self.nai,str(self.pay())))
     
    
t = Temporary('홍길동', 25, 20, 150000)
r = Regular('한국인', 27,3500000)
s = Salesman('손오공', 29,1200000, 50000000, 0.25)

t.data_print() # 이름 : 홍길동, 나이 : 25, 월급 : 3000000
r.data_print() # 이름 : 한국인, 나이 : 27, 급여 : 3500000
s.data_print() # 이름 : 손오공, 나이 : 29, 수령액 : 13700000.0
profile
꾸준히 정리해서 공부한것을 올려보자!

0개의 댓글