物件導向的程式語言如果沒有繼承,類就沒有意義。python同樣支援繼承語法。
如果我們認為人類是乙個父類,中國人就是乙個子類;美國人是另乙個子類。
如果我們認為中國人是乙個父類,北京人就是乙個子類;天津人是另乙個子類。
如果我們認為外星人是乙個父類,變形金剛就是乙個子類;氪星人是另乙個子類。
如果我們認為變形金剛是乙個父類,汽車人就是乙個子類;霸天虎是另乙個子類。
如果我們認為超級英雄是乙個父類,漫威英雄就是乙個子類;dc英雄是另乙個子類。
如果我們認為漫威英雄是乙個父類,復仇者就是乙個子類;自殺小隊是另乙個子類。
與多型、封裝共為物件導向的三個基本特徵。 繼承可以使得子類擁有父類的屬性和方法;也可以重新定義、追加屬性和方法。
首先我們建立乙個父類
class
parent
: name:
str age:
intdef
print_message
(self)
:print
("姓名:{} 年齡:{}"
.format
(self.name, self.age)
)
然後建立乙個子類繼承這個類
# 通過()繼承父類
class
child
(parent):id
:str
defprint_id
(self)
:print
("id:{}"
.format
(self.id)
)
則child類實際擁有三個字段 name age id 和兩個自定義方法 print_message 和 print_id
通過繼承,子類可以獲得父類的屬性和方法,此時父類稱為父類(parent class)或超類(super class),子類稱為子類(child class 或 sub class)。另一方面,子類可以建立屬於自己的屬性和方法,在強調這一過程時,繼承也稱作派生,父類稱為基類(bass class),子類稱為派生類(derived class)。
雖然子類可以繼承父類的方法,但是父類的方法不一定適合子類使用。如果父類的方法不適合子類的使用,子類可以宣告乙個同名方法,將父類的方法覆蓋,這個過程稱為【重寫】。
class
parent
: name:
str age:
intdef
print_message
(self)
:print
("姓名:{} 年齡:{}"
.format
(self.name, self.age)
)# 通過()繼承父類
class
child
(parent):id
:str
defprint_id
(self)
:print
("id:{}"
.format
(self.id)
)# 子類重寫父類的同名方法
defprint_message
(self)
:print
("姓名:{} 年齡:{} id:{}"
.format
(self.name,
self.age, self.id)
)
class
parent
: name:
str age:
intdef
print_message
(self)
:print
("姓名:{}\n年齡:{}"
.format
(self.name, self.age)
)# 通過()繼承父類
class
child
(parent):id
:str
# 子類重寫父類的同名方法,通過super呼叫父類同名方法
defprint_message
(self)
:# 首先列印繼承自父類的兩個字段資訊
super()
.print_message(
)# 再列印子類派生的字段的資訊
print
("id:{}"
.format
(self.id)
)
class
parent
:def
__init__
(self, name, age)
: self.__name = name
self.__age = age
@property
defname
(self)
:return self.__name
@name.setter
defname
(self, value)
: self.__name = value
defprint_message
(self)
:print
("姓名:{}\n年齡:{}"
.format
(self.__name, self.__age)
)
@classmethod
defprint_class_name
(cls)
:print
("parent"
) @staticmethod
defprint_class_type()
:print
("parent"
)# 通過()繼承父類
class
child
(parent)
:# 重寫init方法
def__init__
(self, name, age, id_)
:super()
.__init__(name, age)
self.__id = id_
# 屬性的重寫
@property
defname
(self)
:return self.__name[2:
-3] @name.setter
defname
(self, value)
: self.__name =
"[{}]"
.format
(value)
# 子類重寫父類的同名方法,通過super呼叫父類同名方法
defprint_message
(self)
:super()
.print_message(
)print
("id:{}"
.format
(self.__id)
)# 類方法的重寫
@classmethod
defprint_class_name
(cls)
:print
("parent"
)# 靜態方法的重寫
@staticmethod
defprint_class_type()
:print
("parent"
)
十分鐘學會less
譯者 wleonardo 我們都知道在大型的專案中,當css有數千行 的時候,css的編寫有一些麻煩。我們經常會出現複製相同的 到不同的地方或者通過我們的編輯器來替換所有相同的顏色。這需要我們費很大的力氣去保持css的可維護性。但是其實我們並不是一定要這樣。幸運的是,web開發社群已經解決了這個問題...
十分鐘學會Excel匯出
excel匯出在內網系統一般用的很多,一般分為poi和jxl兩種,前者支援excel2003 xls 和excel2007 xlsx 而後者只支援excel2003 xls 所以我們這裡使用poi來做excel 的匯出 我們以匯出員工資訊的資料為例子 第一步 匯入poi的jar包 第二步,在前台寫乙...
課間十分鐘
時間限制 1000 ms 記憶體限制 128 mb 兩人都是數學愛好者,便發明了乙個遊戲。在遊戲開始前,他們先約定乙個正整數n,同時令m 1。遊戲過程中,每個人都可以將m的值擴大2到9中的任意倍數。第乙個使m n的人就是最後的贏家。181818181818和zbt都十分聰明,並且遊戲過程中都使用最佳...