pyhton3 類的繼承

2021-09-19 04:18:54 字數 2899 閱讀 5214

在類的繼承中,已有的、設計好的類稱為父類或基類,新設計的類稱為子類或派生類。派生類可以繼承父類的公有成員,但是不能繼承其私有成員。

類繼承的語法格式如下:

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字串中的中文會變成形如 不同的出行方式 的格式,可...