python面向对象初识
1.面向?qū)ο蟪醪搅私?/h2>
? 面向過程編程與函數(shù)編程對比:
s1 = 'ajdsgkaffddha' count = 0 for i in s1:count += 1 print(f'字符串的長度為{count}') # 面向過程編程每計(jì)算一次便使用一次for循環(huán)def my_len(s): # 計(jì)算數(shù)據(jù)類型長度的函數(shù),可重復(fù)使用count = 0for i in s:count += 1return count print(my_len(s1))通過對比可知:函數(shù)編程較之面向過程編程最明顯的兩個(gè)特點(diǎn):
1,減少代碼的重用性。
2,增強(qiáng)代碼的可讀性。
同樣,函數(shù)編程與面向?qū)ο笞兂傻膶Ρ?#xff1a;
# 函數(shù)編程 auth # 認(rèn)證相關(guān) def register():pass def login():pass# 賬戶相關(guān) def func1():pass def func2():pass# 購物車相關(guān) def shopping_car():pass def check_paid_goods():pass def check_unpaid_goods():pass def save():pass# 面向?qū)ο缶幊?class Auth:def register():passdef login():passclass Account:def func1():passdef func2():passclass Shopping:def shopping_car():passdef check_paid_goods():passdef check_unpaid_goods():passdef save():pass通過對比可以看出面向?qū)ο蟮谝粋€(gè)優(yōu)點(diǎn):
面向?qū)ο缶幊?#xff1a;是一類相似功能函數(shù)的集合,使你的代碼更清晰化,更合理化。
說第二個(gè)優(yōu)點(diǎn)之前,先看看什么是面向?qū)ο蟆?/p>
面向?qū)ο蟮某绦蛟O(shè)計(jì)的核心是對象(上帝式思維),要理解對象為何物,必須把自己當(dāng)成上帝,上帝眼里世間存在的萬物皆為對象,不存在的也可以創(chuàng)造出來。
那什么是類?什么是對象?
類:就是具有相同屬性和功能的一類事物。
對象:就是類的具體表現(xiàn)。
簡而言之:類就像制造一類事物的模板,而對象則是制造出來的一個(gè)個(gè)具體化的實(shí)例
2.面向的對象的結(jié)構(gòu)
class Human:mind = "有思想"language = "使用語言"l1 = [] # 靜態(tài)變量def work(self):print("人類會工作")def eat(self):print("人類都需要吃飯") # 動態(tài)方法# class 關(guān)鍵字,定義一個(gè)類 # Human 類名,類名使用駝峰(CamelCase)命名風(fēng)格,首字母大寫,私有類可用一個(gè)下劃線開頭。 # 類的結(jié)構(gòu)從大方向來說就分為兩部分: # 靜態(tài)變量。 # 動態(tài)方法。3.從類名的角度研究類
- 類名操作類的屬性
第一種,查看類中的所有內(nèi)容:類名.__dict__方式。
class Human:mind = "有思想"language = "使用語言"l1 = [] # 靜態(tài)變量def work(self):print("人類會工作")def eat(self):print("人類都需要吃飯") # 動態(tài)方法 print(Human.__dict__) # 查看類中所有的內(nèi)容 print(Human.__dict__["mind"]) # 查看類中mind屬性的內(nèi)容 Human.__dict__['mind'] = '無腦' print(Human.__dict__) # 這種做法是錯誤的,__dict__無法修改類中的內(nèi)容第二種:萬能的點(diǎn).
class Human:mind = "有思想" # 第一部分:靜態(tài)屬性 屬性 靜態(tài)變量 靜態(tài)字段dic = {}l1 = []def work(self):print(self)print("人類都會工作") # 第二部分:方法 函數(shù) 動態(tài)屬性 print(Human.mind) # 查 Human.mind = "無腦" # 改 print(Human.mind) del Human.mind # 刪 Human.walk = "直立行走" print(Human.walk) # 通過萬能的. 可以增刪查改類中的單個(gè)屬性**總結(jié):如果想查詢類中的所有內(nèi)容,通過 第一種__dict__方法,如果只是操作單個(gè)屬性則用萬能的點(diǎn)的方式。**
- 類名調(diào)用類的方法
前提:除了兩個(gè)特殊方法:靜態(tài)方法,類方法之外,一般不會通過類名操作一個(gè)類中的方法。
class Human:mind = "有思想"dic = {}l1 = []def work(self):print(self)print("人類會工作")def tools(self):print("人類會使用工具") Human.work(111) Human.tools(111) Human.__dict__["work"](111) # 結(jié)果: 111 人類會工作 人類會使用工具 111 人類會工作4.從對象的角度研究類
- 什么是對象
對象是從類中出來的,只要是類名加上(),這就是一個(gè)實(shí)例化過程,這個(gè)就會實(shí)例化一個(gè)對象。
class Human:mind = "有思想"def __init__(self):print(666)print(self) # <__main__.Human object at 0x00000196E0DA8CF8>def work(self):print("人類會使用工具") obj = Human() # 只要實(shí)例化對象,它會在自動執(zhí)行__init__方法 print(obj) # <__main__.Human object at 0x00000196E0DA8CF8> # 結(jié)果:# obj地址與self的地址相同 666 <__main__.Human object at 0x00000196E0DA8CF8> <__main__.Human object at 0x00000196E0DA8CF8>- 實(shí)例化對象發(fā)生了三件事
其實(shí)實(shí)例化一個(gè)對象總共發(fā)生了三件事:
1.在內(nèi)存中開辟了一個(gè)對象空間。
2.自動執(zhí)行類中的__init__方法,并將這個(gè)對象空間(內(nèi)存地址)傳給了__init__方法的第一個(gè)位置參數(shù)self。
3.在__init__ 方法中通過self給對象空間添加屬性。
class Human:mind = "有思想"language = "使用語言"def __init__(self,name,sex,age,hobby):# self和obj兩個(gè)變量指向同一個(gè)內(nèi)存地址,下面就是通過self給這個(gè)對象空間封裝四個(gè)屬性。self.n = nameself.s = sexself.a = ageself.h = hobbyobj = Human("barry","男",18,"運(yùn)動")- 對象操作對象屬性
class Human:mind = "有思想"language = "使用語言"def __init__(self,name,sex,age,hobby):# self和obj兩個(gè)變量指向同一個(gè)內(nèi)存地址,下面就是通過self給這個(gè)對象空間封裝四個(gè)屬性。self.n = nameself.s = sexself.a = ageself.h = hobbyobj = Human("barry","男",18,"運(yùn)動") obj.job = 'IT' # 增 del obj.n # 刪 obj.s = '女' # 改 print(obj.s) # 查 print(obj.__dict__) # 結(jié)果: 女 {'s': '女', 'a': 18, 'h': '運(yùn)動', 'job': 'IT'}- 對象查看類中的屬性
class Human:mind = "有思想"language = "使用語言"def __init__(self,name,sex,age,hobby):self.n = nameself.s = sexself.a = ageself.h = hobbyobj = Human("barry","男",18,"運(yùn)動") print(obj.mind) print(obj.language) obj.a = 666 print(obj.a) # 結(jié)果: 有思想 使用語言 666- 對象調(diào)用類中的方法
class Human:mind = "有思想"language = "使用語言"def __init__(self,name,sex,age,hobby):self.n = nameself.s = sexself.a = ageself.h = hobbydef work(self):print(self)print("人類會工作")def tools(self):print("人類會使用工具") obj = Human("barry","男",18,"運(yùn)動") obj.work() obj.tools() # 結(jié)果: <__main__.Human object at 0x000001D2414DF7F0> # 實(shí)例化對象內(nèi)存地址 人類會工作 人類會使用工具類中的方法一般都是通過對象執(zhí)行的(出去類方法,靜態(tài)方法外),并且對象執(zhí)行這些方法都會自動將對象空間傳給方法中的第一個(gè)參數(shù)self.
5.self是什么?
self其實(shí)就是類中方法(函數(shù))的第一個(gè)位置參數(shù),只不過解釋器會自動將調(diào)用這個(gè)函數(shù)的對象傳給self。所以咱們把類中的方法的第一個(gè)參數(shù)約定俗成設(shè)置成self, 代表這個(gè)就是對象。
6.一個(gè)類可以實(shí)例化多個(gè)對象
class Human:mind = "有思想"language = "使用語言"def __init__(self,name,sex,age,hobby):self.n = nameself.s = sexself.a = ageself.h = hobbydef work(self):print(self)print("人類會工作")def tools(self):print("人類會使用工具") obj1= Human('小胖','男',20,'美女') obj2= Human('相爺','男',18,'肥女') print(obj1,obj2) print(obj1.__dict__) print(obj2.__dict__) # 結(jié)果: <__main__.Human object at 0x000001C96A1FF860> <__main__.Human object at 0x000001C96A1FF898> {'n': '小胖', 's': '男', 'a': 20, 'h': '美女'} {'n': '相爺', 's': '男', 'a': 18, 'h': '肥女'}轉(zhuǎn)載于:https://www.cnblogs.com/lifangzheng/p/11290599.html
總結(jié)
以上是生活随笔為你收集整理的python面向对象初识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python调用企业微信接口发送群聊消息
- 下一篇: python翻译