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