日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

python基础——继承与派生、组合

發布時間:2023/11/27 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python基础——继承与派生、组合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python基礎——繼承與派生

?

1 什么是繼承:

繼承是一種創建新的類的方式,在python中,新建的類可以繼承自一個或者多個父類,原始類成為基類或超累,新建的類成為派生類或子類

?

1.1 繼承分為:單繼承和多繼承

?

 class ParentClass1:#定義父類passclass ParentClass2:#定義父類passclass SubClass1(ParentClass1):#單繼承,基類是parentClass1,派生類是SubClasspassclass SubClass2(ParentClass1,ParentClass2):#python支持多繼承,用逗號分割開多個繼承的類pass

?

 

1.2?查看繼承 

>>> SubClass1.__bases__
(<class '__main__.ParentClass1'>,)
>>> SubClass2.__bases__
(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)

提示:如果沒有指定基類,python的類會默認繼承object類,object是所有python類的基類,它提供了一些常見方法(如__str__)的實現。

>>> ParentClass1.__bases__
(<class 'object'>,)
>>> ParentClass2.__bases__
(<class 'object'>,)

?

1.3 繼承與抽象(先抽象在繼承)

?

抽象即抽取類似或者說比較像的部分。

?

抽象分成兩個層次:?

?

1.將奧巴馬和梅西這倆對象比較像的部分抽取成類;?

?

2.將人,豬,狗這三個類比較像的部分抽取成父類。

?

抽象最主要的作用是劃分類別(可以隔離關注點,降低復雜度)

?

?

?繼承:是基于抽象的結果,通過編程語言去實現它,肯定是先經歷抽象這個過程,才能通過繼承的方式去表達出抽象的結構。

?抽象只是分析和設計的過程中,一個動作或者說一種技巧,通過抽象可以得到類

?

例子:

?

class Animal:def __init__(self,name,age):self.name=nameself.age=agedef walk(self):def say(self):print('%s is saying'%self.name)
class People(Animal):pass
class Pig(Animal):pass
class Dog(Animal):passp1=People("obama",50)print(p1.name)
print(p1.age)p1.walk() #先找walk名字 找相應的值,去父類找p1.say()

?

obama
50
obama is walking
obama is saying

  

1.4 繼承與重用性

?

?在開發程序的過程中,如果我們定義了一個類A,然后又想新建立另外一個類B,但是類B的大部分內容與類A的相同時

?

我們不可能從頭開始寫一個類B,這就用到了類的繼承的概念。

?

通過繼承的方式新建類B,讓B繼承A,B會‘遺傳’A的所有屬性(數據屬性和函數屬性),實現代碼重用

class Hero:def __init__(self,nickname,aggressivity,life_value):self.nickname=nicknameself.aggressivity=aggressivityself.life_value=life_valuedef move_forward(self):print('%s move forward' %self.nickname)def move_backward(self):print('%s move backward' %self.nickname)def move_left(self):print('%s move forward' %self.nickname)def move_right(self):print('%s move forward' %self.nickname)def attack(self,enemy):enemy.life_value-=self.aggressivity
class Garen(Hero):passclass Riven(Hero):passg1=Garen('草叢倫',100,300)
r1=Riven('銳雯雯',57,200)print(g1.life_value)
r1.attack(g1)
print(g1.life_value)'''
運行結果
300
243
'''

  

?

1.5 繼承與派生

?

1、派生,父類里面沒有的,在子類里面定義獨有的,派生出新的東西。

?

2、派生出父類里面重名的東西,再找先找用子類自己的構造方法。

?

?

例子:父類里面沒有的,在子類里面定義獨有的

?

class Hero:def __init__(self,nicname,aggressivity,life_value):self.nicname=nicnameself.aggressivity=aggressivityself.life_value=life_valuedef attack(self,enemy):enemy.life_value-=self.aggressivity
class Garen(Hero):camp='Demacia'class Riven(Hero):camp='Noxus'g1=Garen('garen',18,200)
r1=Riven('riven',18,200)
print(g1.camp)
print(r1.camp)

?

輸出結果為:

Demacia
Noxus

?

父類里面重名的東西,再找先找用子類自己的構造方法。

class Hero:def __init__(self,nicname,aggressivity,life_value):self.nicname=nicnameself.aggressivity=aggressivityself.life_value=life_valuedef attack(self,enemy):print('Hero attack')enemy.life_value-=self.aggressivity
class Garen(Hero):camp='Demacia'def attack(self,enemy):Hero.attack(self,enemy)print('from garen attack')def fire(self):print('%s is firing'%self.nicname)class Riven(Hero):camp='Noxus'g1=Garen('garen',18,200)
r1=Riven('riven',18,200)
print(g1.camp)
g1.attack(r1)
print(g1.camp)

輸出結果為:

Hero attack
from garen attack
Demacia

  

延續第二種:在子類里面添加新的獨有的功能,如:“script”garen獨有的,但是garen的身份在父類里,可以重用父類的功能

在子類中,重用父類的函數,父類名.父類函數(參數)

class Hero:def __init__(self,nicname,aggressivity,life_value):self.nicname=nicnameself.aggressivity=aggressivityself.life_value=life_valuedef attack(self,enemy):print('Hero attack')enemy.life_value-=self.aggressivity
class Garen(Hero):camp='Demacia'def __init__(self,nicname,aggressivity,life_value,script):Hero.__init__(self,nicname,aggressivity,life_value)self.script=scriptdef attack(self,enemy):Hero.attack(self,enemy)print('from garen attack')
g1=Garen('garen',18,2,'人在塔在')print(g1.script)

輸出結果為:

人在塔在

  

2、組合  

軟件重用的重要方式除了繼承之外還有另外一種方式,即:組合

組合指的是,在一個類中以另外一個類的對象作為數據屬性,稱為類的組合

組合對比繼承來說,也是用來重用代碼,但是組合描述的是一種“有的關系”

?

2.1 組合的方式:

用組合的方式建立了類與組合的類之間的關系,它是一種‘有’的關系,比如老師學生有python課程

class Teacher:def __init__(self,name,sex,course):self.name=nameself.sex=sexself.course=course
class Student:def __init__(self,name,sex,course):self.name=nameself.sex=sexself.course=course
class Course:def __init__(self,name,price,period):self.name=nameself.price=priceself.period=period
Course_obj=Course('python','15800','7m')
t1=Teacher('allen','male',Course_obj)
s1=Student('susan','male',Course_obj)
print(s1.course.name)
print(t1.course.name)

輸出結果為:

python
python

組合與繼承都是有效地利用已有類的資源的重要方式。但是二者的概念和使用場景皆不同 

?

2.2?繼承的方式:

通過繼承建立了派生類與基類之間的關系,它是一種'是'的關系,比如白馬是馬,人是動物。

當類之間有很多相同的功能,提取這些共同的功能做成基類,用繼承比較好,比如教授是老師

>>> class Teacher:
...     def __init__(self,name,gender):
...         self.name=name
...         self.gender=gender
...     def teach(self):
...         print('teaching')
... 
>>> 
>>> class Professor(Teacher):
...     pass
... 
>>> p1=Professor('egon','male')
>>> p1.teach()
teaching

?

轉載于:https://www.cnblogs.com/niejinmei/p/6762317.html

總結

以上是生活随笔為你收集整理的python基础——继承与派生、组合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。