面向對象類的繼承----day23

面向對象類的繼承
在子類中 類名後面加上括號,寫上父類的名稱便可
在python中一個子類能夠有多個父類,多個父類在括號中用逗號隔開,這一點在其餘語言中是不支持的
----------------
class Parent:
year = 2018python

def coding(self):
print("正在編程........")編程

class Sub(Parent):
pass函數

print(Parent.year)設計

print(Sub.year)對象

Sub().coding()繼承

s = Sub()
print(s.year) # 子類可使用父類中的屬性
s.coding() # 子類也可使用父類中的函數內存

抽象:抽取多個類中相同的部分造成另外一個類it

經過繼承,避免了重複代碼的編寫
經過抽象,避免了繼承到一些不該該有的內容
應該先抽象再繼續
在抽取過程當中,可能會有一些跟業務無關的類,這是正常的,這些稱之爲公共類
公共類的做用是存儲多個相同屬性和技能class

派生:
派生就是子類繼承父類,並擁有本身獨特的屬性或技能,該子類稱之爲派生類(只要之類中出現了任何新內容,他就是一個派生類)
派生類必定是某個子類基礎


子類訪問父類的公共的方法:
1.def __init__(self,name,age,sex,number):-----先定義__init__
--父類名.__init__(self,name,age,sex)----------在取得父類中定義的公共方法或屬性
--self.number = number------------------------在定義要添加的方法或屬性

super() # 表示建立一個特殊的對象 用於調用父類的方法
2.super().sayHI()-----------------------------使用super調用父類裏面的方法調用可是隻能在python3中使用

在python2中 super的使用方式有所不一樣 須要傳入當前類,當前對象
3.super(Student,self).__init__(name)----------使用super調用父類裏面的方法添加進去 能夠再python2 和python3中通用
---------------------------------------------------------------------------
# 子類訪問父類的方法
# class Person:
# def __init__(self,name):
# self.name=name
#
#
# class Student(Person):
# def __init__(self,name,number):
# Person.__init__(self,name) #在之類中從用父類的方式 1,指名道姓地調用,與繼承沒有關係
# self.number=number
---------------------------------------------------------------------------
# class Person:
# def __init__(self,name,age,sex):
# self.name=name
# self.age=age
# self.sex=sex
#
#
# class Student(Person):
# def __init__(self,name,age,sex,number):
# super().__init__(name,age,sex) #方法2 用super方法 只能在python3中使用
# # super(Student,self).__init__(name) #方法3 在python2和python3中通用方法
# self.number=number

存在繼承關係的查找順序(查看吧查找順序用:對象.__dict__)
對象->類->父類->父類的父類.....
優先查找對象,若是對象沒有則查找類,類沒有回沿着繼承關係一直查找到最頂層的父類,不管是屬性仍是方法,查找順序是同樣的,先繼承誰就先查找誰

經典類與新式類:

object稱之爲類根 意思是 全部類都源自於object
爲何這麼設計?
例如:建立對象時,須要申請內存空間,建立新的名稱空間,將對象的屬性放入名稱空間,這一些了複雜的基礎操做,都有object來完成
簡單地說object提供了一些經常使用的基礎操做

新式類:全部直接繼承或間接繼承的object的類,都是新式類,在python3中默認全部類都是新式類

經典類:python2中默認是經典類(不會自動繼承object)__bases__用於查看父類"super訪問父類內容時 按照mro列表屬性查找"# 子類出現了與父類重複的名字 稱之爲覆蓋# 子類出現了與父類不一樣的名字 稱之爲拍派生

相關文章
相關標籤/搜索