python繼承的3個特點 物件導向三大特徵之繼承

2021-10-19 03:32:06 字數 4732 閱讀 1390

一、繼承

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代表的是父類物件的引...