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