一個類別可以繼承另一類別而使用被繼承者公開的變數及函式,被繼承者在此關係中稱為父類別(parent class)或基底類別(base class),繼承者稱為子類別(child class)或衍生類別(derived class)。如果在宣告類別時寫成class B(A):
表示A是父類別,B是子類別。呼叫父親的建構元時,寫成:
#-------------------
# 父類別, 職員
#-------------------
class Employee():
def __init__(self, no, name):
self.__no = no
self.__name = name
@property
def no(self):
return self.__no
@property
def name(self):
return self.__name
@no.setter
def no(self, no):
self.__no = no
@name.setter
def name(self, name):
self.__name = name
#-------------------
# 子類別, 一般職員
#-------------------
class RegularEmployee(Employee):
def __init__(self, no, name, rank):
super().__init__(no, name)
self.__rank = rank
@property
def rank(self):
return self.__rank
@rank.setter
def rank(self, rank):
self.__rank = rank
def salary(self, overtimes):
if self.rank == 'A':
return 50000 + overtimes*250
else:
return 45000 + overtimes*200
#-------------------
# 子類別, 鐘點職員
#-------------------
class HourlyEmployee(Employee):
def __init__(self, no, name):
super().__init__(no, name)
def salary(self, hours):
return 245 * hours
#產生1個一般職員
r = RegularEmployee('1001', '王小明', 'A')
print(r.no, r.name, r.rank)
print(r.salary(10)) #加班10小時
#產生1個鐘點職員
h = HourlyEmployee('1002', '陳小華')
print(h.no, h.name)
print(h.salary(30)) #工時30小時
請以以上的例子為基礎,再增加1個「海外職員」類別,名稱是「OverseasEmployee」。「海外職員」也繼承「職員」,它有2個自己的屬性,包括「職等(rank)」及「外派國家(country)」。海外職員另外也有一個計算薪水的方法(salary),計算方法是A職等的薪水都是100,000元;其他職等外派到美國有98,000元,其他國家是90,000元。