python3类与对象汽车,Python3 类与对象
面向?qū)ο蠡A(chǔ)
面向過(guò)程編程
面向過(guò)程的核心是'過(guò)程'二字, 過(guò)程指的是做事情的步驟, 既先做什么再做什么
基于該編程思想編寫程序, 就好比一條工廠流水線, 一種機(jī)械式的思維方式優(yōu)點(diǎn): 邏輯清晰, 復(fù)雜的問(wèn)題流程化, 進(jìn)而簡(jiǎn)單化
缺點(diǎn): 可擴(kuò)展性差
面向?qū)ο缶幊?/p>
面向?qū)ο蟮暮诵氖?#39;對(duì)象'二字, 對(duì)象指的是特征和技能的結(jié)合體
基于該編程思想編寫程序, 就好比在創(chuàng)造世界, 一種上帝式的思維方式優(yōu)點(diǎn): 可擴(kuò)展性強(qiáng)
缺點(diǎn): 編寫程序的復(fù)雜度要遠(yuǎn)高于面向過(guò)程編程
類
什么是類
從上面我們知道對(duì)象是特征和技能的結(jié)合體, 而類是一系列對(duì)象相同的特征和技能的結(jié)合體
在程序中, 先定義類, 再調(diào)用類來(lái)生成對(duì)象
如何定義類定義類的規(guī)則:先從現(xiàn)實(shí)世界中, 基于一個(gè)個(gè)的對(duì)象, 抽取出類
定義類
定義類的語(yǔ)法:class 類名:
# 對(duì)象相同的特征
Kind = 'human'
# 對(duì)象相同的技能
def eat(self):
pass
'''
class: 用來(lái)定義類的, class后跟的是類名
類名: 類的名字, 用來(lái)調(diào)用創(chuàng)造對(duì)象的
注意: 類名必須遵循駝峰命名法
'''在定義類發(fā)生的事情:類定義時(shí), 會(huì)產(chǎn)生一個(gè)空的名稱空間
把類內(nèi)部所有的名字, 扔進(jìn)類的名稱空間中
注意: 類在定義階段就已經(jīng)產(chǎn)生好了名稱空間, 執(zhí)行Python文件時(shí)執(zhí)行類內(nèi)部的代碼class Human:
print('from class Human')
kind = 'human'
def eat(self):
pass
# 運(yùn)行上述代碼結(jié)果為: from class Human
# 因此類在定義階段會(huì)執(zhí)行類中的代碼
類的基本操作class Programmer:
# 特征
language = 'Python'
# 技能
def programming(self):
print('programming...')
# 查看類的名稱空間內(nèi)所有名字
print(Programmer.__dict__)
# '__module__': '__main__', 'language': 'Python', 'programming': , '__dict__': , '__weakref__': , '__doc__': None}
# 查
print(Programmer.__dict__.get('language')) # Python
print(Programmer.language) # Python
# 改
Programmer.language = 'Java'
print((Programmer.language) # Java
# 增
Programmer.girlfriend = 'hands'
print(Programmer.girlfriend) # hands
# 刪
del Programmer.girlfriend
print(Programmer.girlfriend) # type object 'Programmer' has no attribute 'girlfriend'
對(duì)象
實(shí)例化對(duì)象
實(shí)例化對(duì)象就是調(diào)用類來(lái)生成對(duì)象語(yǔ)法: 對(duì)象 = 類名()
名稱空間的產(chǎn)生:類的名稱空間在類的定義階段就已經(jīng)產(chǎn)生了
對(duì)象的名稱空間, 在實(shí)例化對(duì)象的時(shí)候產(chǎn)生(調(diào)用類的時(shí)候)class Programmer:
# 特征
language = 'Python'
# 技能
def programming(self):
print('programming...')
pgmmer1 = Programmer()
pgmmer2 = Programmer()
pgmmer3 = Programmer()
print(pgmmer1.language) # Pyhton
pgmmer1.programming() # programming...
對(duì)象添加特有屬性
問(wèn)題: 我們通過(guò)實(shí)例化生成的對(duì)象特征和技能全都一樣
解決: 在類的內(nèi)部定義__init__函數(shù), __init__函數(shù)可以為對(duì)象初始化某些屬性, 在類被調(diào)用時(shí), 自動(dòng)觸發(fā)該函數(shù)class Programmer:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
language = 'Python'
def programming(self):
print('programming...')
# 我們?cè)賍_init__函數(shù)里設(shè)置了三個(gè)參數(shù), 因此我們?cè)谡{(diào)用類時(shí)就必須傳入三個(gè)參數(shù)
pgmmer1 = Programmer('A', '10', 'male')
pgmmer2 = Programmer('B', '20', 'male')
pgmmer3 = Programmer('C', '30', 'male')
print(pgmmer1.name) # A
print(pgmmer2.name) # B調(diào)用類發(fā)生的事情:首先會(huì)產(chǎn)生一個(gè)空的對(duì)象名稱空間
會(huì)自動(dòng)觸發(fā)__init__函數(shù)
把對(duì)象本身以及括號(hào)內(nèi)參數(shù)一并傳給__init__函數(shù)
運(yùn)行__init__函數(shù)并把產(chǎn)生的名稱丟入該對(duì)象的名稱空間
總結(jié): 調(diào)用類會(huì)產(chǎn)生一個(gè)對(duì)象, 調(diào)用類的過(guò)程叫做類的實(shí)例化, 產(chǎn)生的對(duì)象稱之為類的一個(gè)實(shí)例
對(duì)象與類的查找順序?qū)ο笈c類的查找順序:對(duì)象.屬性, 若對(duì)象本身有, 則優(yōu)先查找對(duì)象自己的
若對(duì)象本身沒(méi)有, 則去類里面找, 若類沒(méi)有, 則報(bào)錯(cuò)class Programmer:
def __init__(self,language):
self.language = language
language = 'Python'
def programming(self):
print('programming...')
pgmmer = Programmer('Java')
print(pgmmer.language) # Java
對(duì)象的綁定方法對(duì)于類內(nèi)部的函數(shù), 其主要是給對(duì)象使用的:當(dāng)函數(shù)由類直接調(diào)用時(shí), 該函數(shù)只是一個(gè)普通的函數(shù), 因此函數(shù)需要幾個(gè)參數(shù)就得傳幾個(gè)參數(shù)
當(dāng)由對(duì)象調(diào)用稱之為對(duì)象的綁定方法(band method), 不同對(duì)象調(diào)用該綁定方法, 則會(huì)把不同的對(duì)象傳入該綁定方法中
二者調(diào)用函數(shù)實(shí)現(xiàn)的功能是一樣的
對(duì)象的綁定方法, 是由對(duì)象來(lái)調(diào)用的, 其特殊之處就是會(huì)把對(duì)象當(dāng)做第一個(gè)參數(shù)傳入 該方法中class Programmer:
# 特征
language = 'Python'
# 技能
def programming(self):
print('programming...')
pgmmer = Programmer()
# 由類來(lái)調(diào)用時(shí), 需要傳一個(gè)參數(shù)給self
Programmer.programming(1) # programming...
# 由對(duì)象調(diào)用綁定方法時(shí), 默認(rèn)把對(duì)象本身傳入該方法, 因此不用再傳入多余的參數(shù)
pgmmer.programming() # programming...
總結(jié)
以上是生活随笔為你收集整理的python3类与对象汽车,Python3 类与对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 梅森增益matlab求解,梅森公式互不接
- 下一篇: common.php下载,插件commo