추상 클래스(추상 메소드) - 자식 클래스에서 부모의 메소드의 이름을 강요하도록 함
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