一、繼承
1.什麼是繼承?
繼承是一種關係,是描述兩個物件之間什麼是什麼的關係,就是將多個類共有的方法提取到父類中,子類僅需繼承父類而不必一一實現每個方法。父親與兒子的關係,人一到年老體邁的時候,難免會走上西方極樂,這時呢,兒子就會繼承他的衣缽,會產生一種關係,這種關係我們可以稱為繼承,當然這只是一種情況,生活中的例子比比皆是。
2.為什麼會有繼承?
繼承的一方可以之間使用被繼承一方已經有的東西。在程式設計中,繼承的目的是為了重用已有的**,提高程式的重用性。
3.繼承的語法
desc = "這是乙個基類"
def show_info(self):
print(self.desc)
def make_money(self):
print("一天賺一百個億")
class subclass(base):
pass
obj = subclass()
obj.make_money() #一天賺一百個億
print(obj.desc) # 這是乙個基類
二、了解抽象的概念
不具體,不清晰,很模糊,看不懂
將多個子類中相同的部分進行抽取,形成乙個新的類,這個過程也稱為抽象的過程
正確的使用繼承:
1.先抽象再繼承
2.繼承乙個已經現存的類,擴充套件或是修改原始的功能
class person:
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
def say_hi(self):
print("name:%s,gender:%s,age:%s"%(self.name,self.gender,self.age))
class teacher(person):
def teaching(self):
print("老師教學生,寫**........")
t1 = teacher("jack","male",20)
t1.say_hi()
class student(person):
pass
stu1 = student("rose","female",18)
stu1.say_hi()
三、屬性的查詢順序
class person:
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
def say_hi(self):
print("name:%s,gender:%s,age:%s"%(self.name,self.gender,self.age))
class teacher(person):
def teaching(self):
print("老師教學生,寫**........")
t1 = teacher("jack","male",20)
t1.say_hi() # name:jack,gender:20,age:male
class student(person):
pass
stu1 = student("rose","female",18)
stu1.say_hi() # name:rose,gender:18,age:female
物件自己的->所在類中->找父類->父類的父類->object
四、派生與覆蓋
派生是當乙個子類**現了父類中不同的內容時,這個子類就叫做派生類,通常子類都會寫一些新的**,不可能和父類完全相同,即通常就是派生類,所以派生類就是子類。
class person:
def say_hi(self):
print("hello")
class student(person):
def say_hi(self):
print("hello world!")
stu = student()
stu.say_hi()
覆蓋是當子類出現了與父類名稱完全一致的屬性或方法
練習:實現乙個可以限制元素型別的元素(字典,列表,元組,集合,字串)
class mylist(list):
def __init__(self,element_type):
super().__init__()
self.element_type = element_type
if type(object) == self.element_type:
else:
print('sorry sir, you element type not is %s" % self.element_type')
m = mylist(int)
print(m[0])
六、子類中訪問父類的方法
1.指名道姓,即父類名,父類方法()
class vehicle: #定義交通工具類
country='china'
def __init__(self,name,speed,load,power):
self.name=name
self.speed=speed
self.load=load
self.power=power
def run(self):
print('開動啦...')
class subway(vehicle): #地鐵
def __init__(self,name,speed,load,power,line):
vehicle.__init__(self,name,speed,load,power)
self.line=line
def run(self):
print('地鐵%s號線歡迎您' %self.line)
vehicle.run(self)
line13=subway('中國地鐵','180m/s','1000人/箱','電',13)
line13.run()
2,.super()
class vehicle: #定義交通工具類
country='china'
def __init__(self,name,speed,load,power):
self.name=name
self.speed=speed
self.load=load
self.power=power
def run(self):
print('開動啦...')
class subway(vehicle): #地鐵
def __init__(self,name,speed,load,power,line):
#super(subway,self) 就相當於例項本身 在python3中super()等同於super(subway,self)
super().__init__(name,speed,load,power)
self.line=line
def run(self):
print('地鐵%s號線歡迎您' %self.line)
super(subway,self).run()
class mobike(vehicle):#摩拜單車
pass
line13=subway('中國地鐵','180m/s','1000人/箱','電',13)
line13.run()
當繼承乙個現有的類,並且覆蓋了父類的init的方法時,必須在初始化方法的第一行呼叫父類的初始化,並傳入父類所需的引數
七、組合
組合也是一種關係,描述兩個物件之間,是什麼有什麼的關係。例如,學生有手機,將乙個物件作為另乙個物件的屬性。
class phone:
def __init__(self,price,kind,color):
self.price = price
self.kind = kind
self.color = color
def call(self):
print("正在呼叫***x;")
def send_message(self):
print("正在傳送簡訊....")
class student:
def __init__(self,name,gender,phone):
self.name = name
self.gender = gender
self.phone = phone
def show_info(self):
print("name:%s gender:%s" % (self.name,self.gender))
stu1 = student("rose","male",phone)
stu1.phone.call()
八、新式類和經典類
python3中任何類都是直接或者間接繼承了object,新式類,任何顯式或者隱式的繼承object的類就稱為新式類,python3中全都是新式類
經典類不是object的子類,僅在python2**現。
當出現了菱形繼承時,新式類,先深度,當遇到了共同父類就廣度,新式類就是深度優先
Python3物件導向 2 繼承(3)
重寫與super 如果想繼承聯絡人的朋友類的初始化方法中新增乙個phone的預設值怎麼辦呢?則需要用到重寫 任何方法都可以重寫 在子類中,方法名相同,引數不同即可。pythonclass contactlist list defsearch self,name 返回所有符合名字的類 matching...
python 面向繼承物件 繼承
1.python物件導向的繼承指的是多個類之間的所屬關係,即預設繼承父類的所有屬性和方法。2.注意 當乙個類有多個父類的時候,預設使用第乙個父類的同名屬性和方法。3.檢視某個類的繼承關係 物件.mro 4.子類呼叫父類的同名方法和屬性 class a object definit self self...
繼承的特點
子父類出現後,類成員的特點 類中成員 1,變數。2,函式。3,建構函式。1,變數 如果子類 現非私有的同名成員變數時,子類要訪問本類中的變數,用this 子類要訪問父類中的同名變數,用super。super的使用和this的使用幾乎一致。this代表的是本類物件的引用。super代表的是父類物件的引...