python 面向对象编程简称_Python基础-面向对象编程
簡介
三中編程范式
面向過程編程
函數(shù)式編程
面向?qū)ο缶幊?/p>
面向?qū)ο蠛兔嫦蜻^程對比
面向過程
優(yōu)點:
性能比面向?qū)ο蟾?#xff0c;因為類調(diào)用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌入式開發(fā)、Linux/Unix等一般采用面向過程開發(fā),性能是最重要的因素。
缺點:
沒有面向?qū)ο笠拙S護(hù)、易復(fù)用、易擴展
面向?qū)ο?/p>
優(yōu)點:
易維護(hù)、易復(fù)用、易擴展,由于面向?qū)ο笥蟹庋b、繼承、多態(tài)性的特性,可以設(shè)計出低耦合的系統(tǒng),使系統(tǒng)更加靈活、更加易于維護(hù) - 缺點:
性能比面向過程低
定義
類(Class)
用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
函數(shù)屬性
即函數(shù),在面向?qū)ο罄锝y(tǒng)稱為方法
數(shù)據(jù)屬性
即變量,類變量或者實例變量用于處理類及其實例對象的相關(guān)的數(shù)據(jù)。
方法重寫
如果從父類繼承的方法不能滿足子類的需求,可以對其進(jìn)行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
實例變量
定義在方法中的變量,只作用于當(dāng)前實例的類。
封裝
描述了對數(shù)據(jù)/信息進(jìn)行隱藏的觀念,它對數(shù)據(jù)屬性提供接口和訪問函數(shù)。
繼承
即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設(shè)計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關(guān)系(例圖,Dog是一個Animal)。
實例化
創(chuàng)建一個類的實例,類的具體對象。
方法
類中定義的函數(shù)。
對象
通過類定義的數(shù)據(jù)結(jié)構(gòu)實例。對象包括兩個數(shù)據(jù)成員(類變量和實例變量)和方法。
示例
聲明類示例
class 類名(可選參數(shù)):
["注釋"]
類體
數(shù)據(jù)&函數(shù)屬性調(diào)用
class Text:
'''這是一個測試的類!'''
a = '測試'
def test():
print("這是一個測試函數(shù)(方法)!")
print(Text.a)
Text.test()
print(dir(Text)) #查看屬性名稱
print(Text.__dict__) #查看類屬性的字典
測試
這是一個測試函數(shù)(方法)!
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'test']
{'__module__': '__main__', '__doc__': '這是一個測試的類!', 'a': '測試', 'test': , '__dict__': , '__weakref__': }
初始化函數(shù)
class Text:
'''這是一個測試的初始化函數(shù)!'''
def __init__(self,name,age,gender):
self.a = name
self.b = age
self.c = gender
v = Text("小明","18歲","男") #實例化生成的對象
print(v.__dict__) #生成對應(yīng)的字典
print(v.a,v.b,v.c) #字典取值
封裝
==即把代碼隱藏起來,并非真正隱藏,而是一種使用接口調(diào)用“隱藏”類的約定==
隱藏調(diào)用,_開頭的函數(shù)
class Test:
_num = "this is test!!!"
P = Test()
print(P._num)
隱藏調(diào)用,__開頭的函數(shù)
class Test:
__num = "this is test!!!"
P = Test()
print(P._Test__num)
增刪改查
==注:類底層以字典形式記錄保存數(shù)據(jù),切勿以字典形式修改數(shù)據(jù)==
數(shù)據(jù)屬性增刪改查
# -*- coding:utf8 -*-
class Obj:
mold='動物'
def __init__(self,name):
self.name = name
def play_ball(self,ball):
print('%s是一個%s' %(self.name,ball))
print(Obj.mold) #查看
Obj.mold = '植物' #修改
print(Obj.mold) #顯示修改后內(nèi)容
Obj.aquatic = "水產(chǎn)" #增加
print(Obj.aquatic) #顯示增加后的內(nèi)容
del Obj.aquatic #刪除
動物
植物
水產(chǎn)
函數(shù)屬性增刪改查
# -*- coding:utf8 -*-
class Obj:
mold='動物'
def __init__(self,name):
self.name = name
def play_ball(self,ball):
print('%s是一個%s' %(self.name,ball))
def test():
print("This is test !!!")
def test2():
print("My test2 !!!")
Obj.add_test =test #新增
print(Obj.__dict__) #確認(rèn)是否加入類
Obj.add_test() #查看
Obj.play_ball = test2 #修改
Obj.play_ball() #修改后查看確認(rèn)
del Obj.add_test #刪除
{'__module__': '__main__', 'mold': '動物', '__init__': , 'play_ball': , '__dict__': , '__weakref__': , '__doc__': None, 'add_test': }
This is test !!!
My test2 !!!
實例屬性增刪改查
# -*- coding:utf8 -*-
class Obj:
mold='動物'
def __init__(self,name):
self.name = name
def play_ball(self,ball):
print('%s是一個%s' %(self.name,ball))
def test():
print("This is test !!!")
def test2():
print("My test2 !!!")
P = Obj('小貓') #生成實例
P.play_ball('釣魚') #執(zhí)行查看
P.address = '河邊' #實例增加數(shù)據(jù)屬性
print(P.__dict__) #查看實例增加的數(shù)據(jù)屬性
print(P.address)
P.test = test #實例增加函數(shù)屬性
print(P.__dict__) #查看示例增加的函數(shù)屬性
print(P.test)
P.test() #執(zhí)行測試
小貓是一個釣魚
{'name': '小貓', 'address': '河邊'}
河邊
{'name': '小貓', 'address': '河邊', 'test': }
This is test !!!
特殊類屬性
名稱
釋義
Class.__name__
類的名字
Class.__doc__
類的文檔(聲明注釋內(nèi)容)
Class.__base__
類的第一個父類
Class.__bases__
類的所有弗雷構(gòu)成的元組
Class.__dict__
類的屬性
Class.__module__
類定義所在的模塊
Class.__class__
示例對應(yīng)的類
面向?qū)ο笤O(shè)計
數(shù)據(jù)類型余動作的結(jié)合
# -*- coding:utf8 -*-
def production(name,addr,type): #函數(shù)定義的類型
def eat(obj): #函數(shù)定義的動作1
print('在%s有一個%s的%s' %(obj['addr'],obj['type'],obj['name'])) #輸出項目內(nèi)容,以字典形式傳值,接受項也需要是字典
def play(obj): #函數(shù)定義的動作2
print('%s正在%s%s' %(obj['name'],obj['addr'],obj['type'])) #輸出項目內(nèi)容,以字典形式傳值,接受項也需要是字典
def init(name,addr,type): #初始化函數(shù)把動作和類型放置一起
obj_dic = { #定義的包含動作和類型的字典
'name':name,
'addr':addr,
'type':type,
'eat':eat,
'play':play
}
return obj_dic #返回動作和類型的字典
return init(name,addr,type) #返回動作和類型的對象
s1 = production('小貓','河邊','釣魚') #生產(chǎn)測試
print(s1) #生產(chǎn)類型,輸出包含動作和類型的的項目字典
s1['play'](s1) #總體執(zhí)行,包含動作和類型,嵌套函數(shù)以字典傳值所以函數(shù)參數(shù)為原函數(shù)執(zhí)行的字典結(jié)果
{'name': '小貓', 'addr': '河邊', 'type': '釣魚', 'eat': .eat at 0x0000024E1B3C41E0>, 'play': .play at 0x0000024E1B3C42F0>}
小貓正在河邊釣魚
面向?qū)ο缶幊?/p>
面向?qū)ο缶幊酞氂姓Z法去實現(xiàn)面向?qū)ο笤O(shè)計
# -*- coding:utf8 -*-
class Test: #定義類的類型
def eat(obj): #函數(shù)定義的動作1
print('在%s有一個%s的%s' %(s1.b,s1.c,s1.a)) #輸出項目內(nèi)容,從初始化函數(shù)中調(diào)用
def play(obj): #函數(shù)定義的動作2
print('%s正在%s%s' %(s1.a,s1.b,s1.c)) #輸出項目內(nèi)容,從初始化函數(shù)中調(diào)用
def __init__(self,name,addr,type): #初始化函數(shù)
self.a = name
self.b = addr
self.c = type
s1 = Test('小貓','河邊','釣魚') #生產(chǎn)測試
print(s1) #生產(chǎn)類型,輸出實例化對象
s1.play() #總體執(zhí)行,包含動作和類型
小貓正在河邊釣魚
總結(jié)
以上是生活随笔為你收集整理的python 面向对象编程简称_Python基础-面向对象编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 三菱plc,三菱FX系列PLC编
- 下一篇: 通过apizza生成python接口测试