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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python------面向对象介绍

發布時間:2023/12/18 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python------面向对象介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考博客:http://www.cnblogs.com/alex3714/articles/5188179.html

一.面向對象介紹
class
object

封裝
繼承
多態

語法
屬性
方法
構造函數
析構函數

私有方法,私有屬性

類變量
實例變量

1.編程范式:
1)面向過程編程(Procedural Programming):
? ? ? ? ? ? ?又被稱為top-down languages,程序從上到下一步步執行,從頭到尾。
? ? ? ? ? ? ? 缺點:一次性,維護難度大。
2)面向對象編程(Object-Oriented Programming OOP):
? ? ? ? ? ? ? 利用“類”和”對象“來創建各種模型來實現對真實世界的描述。
? ? ? ? ? ? ? 優點:使編程的維護和擴展變得簡單,大大提高程序開發效率,
? ? ? ? ? ? ? ? ? ? ? ? ?容易理解,團隊開發變得容易。

2.面向對象編程
1)class類:
對一類擁有相同屬性的對象的抽象、藍圖、原型。在類中定義了這些對象都具備的屬性、共同的方法。
2) object對象:
一個對象即是一個類實例化后的實例。一個類必須經過實例化后才能在程序中調用;一個類可以實
例化多個對象,每個對象可以有不同的屬性。

3)三大特性:
Encapsulation封裝:在類中對數據的賦值、內部調用對外部用戶是透明(用戶不可見)的,
這使類變成了一個膠囊或者容器,里面包含著類的數據和方法。

Inheritance繼承:一個類可以派生出子類,在這個父類里定義的屬性、方法自動被子類繼承。

Ploymorphism多態:
多態是面向對象的重要特性,簡單點說:“一個接口,多種實現”,
指一個基類中派生出了不同的子類,且每個子類在繼承了同樣的方法名的同時又對
父類的方法做了不同的實現,這就是同一種事物表現出的多種形態。

編程其實就是一個將具體世界進行抽象化的過程,多態就是抽象化的一種體現,把一系
列具體事物的共同點抽象出來, 再通過這個抽象的事物, 與不同的具體事物進行對話。
對不同類的對象發出相同的消息將會有不同的行為。

比如,你的老板讓所有員工在九點鐘開始工作, 他只要在九點鐘的時候說:“開始工作”即可,
而不需要對銷售人員說:“開始銷售工作”,對技術人員說:“開始技術工作”, 因為“員工”是一個抽象的事物,
只要是員工就可以開始工作,他知道這一點就行了。至于每個員工,當然會各司其職,做各自的工作。
多態允許將子類的對象當作父類的對象使用,某父類型的引用指向其子類型的對象,
調用的方法是該子類型的方法。這里引用和調用方法的代碼編譯前就已經決定了,
而引用所指向的對象可以在運行期間動態綁定。

3.定義類:

class Dog:def __init__(self,name):self.name = namedef bulk(self):print("%s : wang wang wang" % self.name)d1 = Dog("hah ") d2 = Dog("hehh") d3 = Dog("jajj")d1.bulk() d2.bulk() d3.bulk()

?

4.構造函數 class Role(object):n = 123 #類變量name = '我是類name' n_list = [] #增加一個列表 #定義一個類, class是定義類的語法,Role是類名,(object)是新式類的寫法,必須這樣寫,以后再講為什么def __init__(self,name,role,weapon,life_value=100,money=15000):#構造函數 #初始化函數,在生成一個角色時要初始化的一些屬性就填寫在這里 #__init__中的第一個參數self,和這里的self都 是什么意思?self.name = name #等價于 r1.name = name #實例變量(靜態屬性),作用域就是實例本身。self.role = roleself.weapon = weaponself.life_value = life_value
self.__life_value = life_value #私有屬性,前面加兩個下劃線self.money = moneydef shot(self): # 類的方法,功能(動態屬性)print("shooting!")print(Role.n) r1 = Role('xiaolaizi','police','98K') #把一個類變成一個具體對象的過程叫實例化 r1.name = "小賴子" #改名 r1.bullet_prove = True #添加類中沒有的一個屬性 r1.n_list.append("from r1") #往類變量列表中添加內容 print(r1.n,r1.name,r1.n_list)r2 = Role('xiaomazi','police','mini14') print(r2.n,r2.name,r2.n_list)

  

?



 5. 類變量與實例變量區別:

? ? ? ? ? ? ? ?對象先調用實例變量,找不到再去類變量里面找。

? ? ? ? ? ? ? ? ? ?實例變量可以修改,增加,刪除 (del)。

? ? ? ? ? ? ? ? ? ? 實例變量:每個對象各自特有的屬性;

? ? ? ? ? ? ? ? ? ? 類變量:? 共有的屬性。

? ?

6.類變量的作用及析構函數

? ? ? ?類變量的用途:大家公用的屬性,節省開銷。

?

? ?析構函數:在實例釋放(就是自己寫了? del? 某某某之后)、銷毀的時候自動執行的,通常用于做一些收尾工作,如關閉一些數據庫連接,關閉打開的臨時文件。

?

? ? ? ? ? ? ? ? ? ?只有你自己del r1這個實例對象,python才會銷毀r1對應的內存。(哪怕是你創建了r1這個內存之后再也不用了,python

? ? ? ? ? ? ?也不會去給你刪除,因為他不知道你用不用,只有當你摘去r1這個門牌號,python 才會拆了這座房子)

?

?7. 私有方法,已有屬性

? ? ?前面加兩個下劃線,只能在內部訪問。

?

8.類的繼承?

? ? ? ?

1 class People: 2 """類的繼承,父類""" 3 def __init__(self,name,age): 4 self.Name = name #self.name = name 5 self.Age = age #Age是變量名,age是參數名。可以不一樣,但是一般 都寫一樣的。 6 7 def eat(self): 8 print("%s is eating ..." % self.Name) 9 10 def sleep(self): 11 print("%s is sleeping ..." % self.Name) 12 13 def talk(self): 14 print("%s is talking ..." % self.Name) 15 16 class Man(People): 17 def piao(self): 18 print("%s is piaoing ..." % self.Name) 19 20 #def sleep(self): #覆蓋了父類方法 21 # print("man is sleeping ...") 22 # print("-"*20) 23 24 def sleep(self): #重構父類的方法 25 People.sleep(self) #既執行父類的方法,又執行子類的方法 26 print("+" * 20) 27 print("man is sleeping ...") 28 29 class Women(People): 30 def get_birth(self): 31 print("%s is born a baby" % self.Name) 32 33 34 m1 = Man("xiaolaizi",22) 35 w1 = Women("xiaolizi",24) 36 m1.eat() 37 m1.piao() 38 m1.sleep() 39 w1.get_birth()

問題來了,那么怎么在父類的基礎上只給Man類增加除了name ,age 之外的屬性呢,而不影響Women子類?

1 class People: 2 """類的繼承,父類""" 3 def __init__(self,name,age): 4 self.Name = name #self.name = name 5 self.Age = age #Age是變量名,age是參數名??梢圆灰粯?#xff0c;但是一般 都寫一樣的。 6 7 def eat(self): 8 print("%s is eating ..." % self.Name) 9 10 def sleep(self): 11 print("%s is sleeping ..." % self.Name) 12 13 def talk(self): 14 print("%s is talking ..." % self.Name) 15 16 class Man(People): 17 def __init__(self,name,age,money): #對構造函數進行重構 18 People.__init__(self,name,age)
#等價于 super(Man,self).__init__(name,age) 優點是不用寫父類名(哈哈哈)
19 self.money = money
20 print("%s 一生下來就有錢。。。。" % self.Name) 21 22 def piao(self): 23 print("%s is piaoing ..." % self.Name) 24 25 def sleep(self): #重構父類的方法 26 People.sleep(self) #既執行父類的方法,又執行子類的方法 27 print("man is sleeping ...") 28 29 class Women(People): 30 def get_birth(self): 31 print("%s is born a baby" % self.Name) 32 m1 = Man("xiaolaizi",22,1000) 33 w1 = Women("xiaolizi",24) 34 m1.eat() 35 m1.piao() 36 m1.sleep() 37 w1.get_birth()

? ? ?

多繼承:

1 class People(object): #新式類 父類1 2 """類的繼承,父類""" 3 def __init__(self,name,age): 4 self.Name = name #self.name = name 5 self.Age = age #Age是變量名,age是參數名。可以不一樣,但是一般 都寫一樣的。 6 7 def eat(self): 8 print("%s is eating ..." % self.Name) 9 10 def sleep(self): 11 print("%s is sleeping ..." % self.Name) 12 13 def talk(self): 14 print("%s is talking ..." % self.Name) 15 16 class Relation(object): #父類2 17 def make_friend(self,obj): 18 print("%s is making friends with %s" %(self.Name,obj.Name)) 19
20 21 class Man(People,Relation): #多繼承 繼承的順序從左到右 22 def __init__(self,name,age,money): #對構造函數進行重構 23 #People.__init__(self,name,age) 24 super(Man,self).__init__(name,age) #新式類的寫法 25 26 self.money = money 27 print("%s 一生下來就有錢。。。。" % self.Name) 28 29 def piao(self): 30 print("%s is piaoing ..." % self.Name) 31 32 def sleep(self): #重構父類的方法 33 People.sleep(self) #既執行父類的方法,又執行子類的方法 34 print("man is sleeping ...") 35 36 class Women(People,Relation): 37 def get_birth(self): 38 print("%s is born a baby" % self.Name) 39 m1 = Man("xiaolaizi",22,1000) 40 w1 = Women("xiaolizi",24) 41 m1.make_friend(w1)
執行結果:

xiaolaizi 一生下來就有錢。。。。
xiaolaizi is making friends with xiaolizi

那么問題來了,父類2 沒有構造函數,怎么就傳進去參數了呢?
那是因為我們已經在父類1繼承了name,age 屬性(哈哈哈)

?

轉載于:https://www.cnblogs.com/bltstop/p/9649424.html

總結

以上是生活随笔為你收集整理的python------面向对象介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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