在類的繼承中,已有的、設計好的類稱為父類或基類,新設計的類稱為子類或派生類。派生類可以繼承父類的公有成員,但是不能繼承其私有成員。
類繼承的語法格式如下:
class 派生類名(基類名):
派生類成員
在python中繼承有以下特點:
在繼承中基類的建構函式(__init__()方法)不會自動呼叫,它需要在其派生類的構造中專門呼叫。
如果需要在派生類中呼叫基類的方法,通過"基類名.方法名()"的方式來實現,需要加上基類的類名字首,且需要帶上self引數變數(在類中呼叫普通函式時並不需要帶上self引數),也可以使用內建函式super()實現這一目的。
python 總是先查詢對應的型別方法,如果不能再派生類中找到對應的方法,它才開始到基類中逐個查詢(先在本類中查詢呼叫方法,找不到才去基類中找)
例:設計person類,並根據person派生student類,分別建立person類與student類的物件。
# -*- coding : utf-8 -*-
import types
# 基類必須繼承於object, 否則在派生類中將無法使用super()函式
class person(object):
def __init__(self, name = '', age=20, ***='main'):
self.setname(name)
self.setage(age)
self.set***(***)
def setname(self, name):
# 內建函式type()返回被測物件的資料型別
if type(name) != str:
print('姓名必須是字串.')
return
self.__name= name
def setage(self, age):
if type(age) != int:
print('年齡必須是整數')
return
self.__age = age
def set***(self, ***):
if ***!='男' and *** != '女':
print('性別輸入錯誤')
return
self.__***=***
def show(self):
print('姓名:', self.__name, '年齡:', self.__age, '性別:', self.__***)
#定義子類(student類),在其中增加乙個入學年份私有屬性(資料成員)
class student(person):
def __init__(self, name='', age=20, ***='man', schoolyear=2016):
# 呼叫基類構造方法初始化基類的私有資料成員
super(student,self).__init__(name, age, ***)
# 也可以這樣初始化基類的私有資料成員
#person.__init__(self, name, age, ***)
self.setschoolyear(schoolyear)
# 初始化派生類的資料成員
def setschoolyear(self, schoolyear):
self.__schoolyear=schoolyear
def show(self):
# 呼叫基類的show()方法
person.show(self)
# 也可以這樣呼叫基類的show方法
# super(student,self).show()
print('入學年份:', self.__schoolyear)
# 主程式
if __name__=='__main__':
zhangsan=person('張三',19,'男')
zhangsan.show()
lisi=student('李四',18,'男')
lisi.show()
#呼叫繼承的方法修改年齡
lisi.setage(20)
lisi.show()
執行結果:
姓名: 張三 年齡: 19 性別: 男
姓名: 李四 年齡: 18 性別: 男
入學年份: 2016
姓名: 李四 年齡: 20 性別: 男
入學年份: 2016
方法重寫必須出現在繼承中。它是指在派生類繼承了基類的方法之後,如果基類方法的功能不能滿足需求,需要對基類中的某些方法進行修改。使用者可以在派生類中重寫基類的方法,這就是重寫。
例:重寫父類(基類)的方法。
# -*- coding : utf-8 -*-
import types
# 定義父類
class animal:
def run(self):
print("animal is running...")
class cat(animal):
def run(self):
print("cat is running...")
class dog(animal):
def run(self):
print("dog is running...")
c = cat()
c.run()
d = dog()
d.run()
執行結果:
cat is running...
dog is running...
當子類dog和父類animal存在相同的run()方法時,子類的run()覆蓋了父類的run(),在**執行時總是會呼叫子類的run()。 pyhton3資料型別之list
list使用中括號建立,list中的元素可以存放任何型別的元素,元素之間用逗號隔開.list1 初始化乙個空list list2 a b c 初始化乙個list,有三個str型別的元素 list3 1,2,3,4 初始化乙個list,有四個int型別的元素 list3 a b c 1,2,3,4 初...
pyhton3資料型別之tuple
1 元組的建立 tup1 a b c d tup2 a b c d tup1和tup2的效果是相同的 tup3 建立乙個空元素 當初始化乙個只有乙個元素的元組,tup4 12 或者 tup4 12,或者 tup4 12,後面的逗號必須要 2 元組的特點 元組和list類似,具有索引,區別在於元組中的...
pyhton3 將 開頭字元轉為中文
將ncr字元轉換成真實字元 以 或 x開頭的字串叫做ncr字元,在瀏覽器中檢視會直接轉換成中文。在爬蟲中使用 lxml 解析得到網頁內容的html 時,網頁中的中文都會顯示成ncr字元的形式。通過 xpath 或 pyquery 獲得的網頁的html字串中的中文會變成形如 不同的出行方式 的格式,可...