覆寫方法
- 如你所見,新類別一開始就會繼承它的父類別的任何東西
- 接下來,你會看到如何「替換或覆寫父類別的方法」
- 子類別有些地方應該會與父類別不一樣 → 否則,定義一個新類別的目的是什麼?
【範例一】更改/覆寫「子類別」的「函式方法的行為」
>>> class 父類別名稱():
def 函式名稱(self):
print("字串1")
>>> class 子類別名稱(父類別名稱):
def 函式名稱(self):
print("字串2")
>>> 文字1 = 父類別名稱()
>>> 文字2 = 子類別名稱()
>>> 文字1.函式名稱()
字串1
>>> 文字2.函式名稱()
字串2
>>> class Car():
def exclaim(self):
print("I'm a Car!")
# Yugo 有些地方應該會與 Car 不一樣,否則,定義一個新類別的目的是什麼?
# 更改 Yugo 的 exclaim() 方法的行為(覆寫了 exclaim() 方法)
>>> class Yugo():
def exclaim(self):
print("I'm a Yugo! Much like a Car, but more Yugo-ish.")
# 接著,用這些類別來製作兩個物件
>>> give_me_a_car = Car()
>>> give_me_a_yugo = Yugo()
# 他們說了些什麼?
>>> give_me_a_car.exclaim()
I'm a Car!
>>> give_me_a_yugo.exclaim()
I'm a Yugo! Much like a Car, but more Yugo-ish.
【範例二】可以覆寫任何方法,包括 init
>>> class 父類別名稱():
def __init__(self, name):
self.name = name
>>> class 子類別名稱1(父類別名稱):
def __init__(self, name):
self.name = "字串1" + name
>>> class 子類別名稱2(父類別名稱):
def __init__(self, name):
delf.name = name + "字串2"
>>> 文字1 = 父類別名稱('引數1')
>>> 文字2 = 子類別名稱('引數2')
>>> 文字3 = 子類別名稱('引數2')
>>> print(文字1.name)
引數1
>>> print(文字2.name)
字串1 引數2
>>> print(文字3.name)
引數2 字串2
>>> class Person():
def __init__(self, name):
self.name = name
>>> class MDPerson(Person):
def __init__(self, name):
self.name = "Doctor " + name
>>> class JDPerson(Person):
def __init__(self, name):
self.name = name + ", Esquire"
>>> person = Person('Fudd')
>>> doctor = MDPerson('Fudd')
>>> lawyer = JDPerson('Fudd')
>>> print(person.name)
Fudd
>>> print(doctor.name)
Doctor Fudd
>>> print(lawyer.name)
Fudd, Esquire