python 面向对象编程简称_Python基础-面向对象编程
簡介
三中編程范式
面向過程編程
函數式編程
面向對象編程
面向對象和面向過程對比
面向過程
優點:
性能比面向對象高,因為類調用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌入式開發、Linux/Unix等一般采用面向過程開發,性能是最重要的因素。
缺點:
沒有面向對象易維護、易復用、易擴展
面向對象
優點:
易維護、易復用、易擴展,由于面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易于維護 - 缺點:
性能比面向過程低
定義
類(Class)
用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。
函數屬性
即函數,在面向對象里統稱為方法
數據屬性
即變量,類變量或者實例變量用于處理類及其實例對象的相關的數據。
方法重寫
如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
實例變量
定義在方法中的變量,只作用于當前實例的類。
封裝
描述了對數據/信息進行隱藏的觀念,它對數據屬性提供接口和訪問函數。
繼承
即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關系(例圖,Dog是一個Animal)。
實例化
創建一個類的實例,類的具體對象。
方法
類中定義的函數。
對象
通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。
示例
聲明類示例
class 類名(可選參數):
["注釋"]
類體
數據&函數屬性調用
class Text:
'''這是一個測試的類!'''
a = '測試'
def test():
print("這是一個測試函數(方法)!")
print(Text.a)
Text.test()
print(dir(Text)) #查看屬性名稱
print(Text.__dict__) #查看類屬性的字典
測試
這是一個測試函數(方法)!
['__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__': }
初始化函數
class Text:
'''這是一個測試的初始化函數!'''
def __init__(self,name,age,gender):
self.a = name
self.b = age
self.c = gender
v = Text("小明","18歲","男") #實例化生成的對象
print(v.__dict__) #生成對應的字典
print(v.a,v.b,v.c) #字典取值
封裝
==即把代碼隱藏起來,并非真正隱藏,而是一種使用接口調用“隱藏”類的約定==
隱藏調用,_開頭的函數
class Test:
_num = "this is test!!!"
P = Test()
print(P._num)
隱藏調用,__開頭的函數
class Test:
__num = "this is test!!!"
P = Test()
print(P._Test__num)
增刪改查
==注:類底層以字典形式記錄保存數據,切勿以字典形式修改數據==
數據屬性增刪改查
# -*- 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) #顯示修改后內容
Obj.aquatic = "水產" #增加
print(Obj.aquatic) #顯示增加后的內容
del Obj.aquatic #刪除
動物
植物
水產
函數屬性增刪改查
# -*- 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__) #確認是否加入類
Obj.add_test() #查看
Obj.play_ball = test2 #修改
Obj.play_ball() #修改后查看確認
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('釣魚') #執行查看
P.address = '河邊' #實例增加數據屬性
print(P.__dict__) #查看實例增加的數據屬性
print(P.address)
P.test = test #實例增加函數屬性
print(P.__dict__) #查看示例增加的函數屬性
print(P.test)
P.test() #執行測試
小貓是一個釣魚
{'name': '小貓', 'address': '河邊'}
河邊
{'name': '小貓', 'address': '河邊', 'test': }
This is test !!!
特殊類屬性
名稱
釋義
Class.__name__
類的名字
Class.__doc__
類的文檔(聲明注釋內容)
Class.__base__
類的第一個父類
Class.__bases__
類的所有弗雷構成的元組
Class.__dict__
類的屬性
Class.__module__
類定義所在的模塊
Class.__class__
示例對應的類
面向對象設計
數據類型余動作的結合
# -*- coding:utf8 -*-
def production(name,addr,type): #函數定義的類型
def eat(obj): #函數定義的動作1
print('在%s有一個%s的%s' %(obj['addr'],obj['type'],obj['name'])) #輸出項目內容,以字典形式傳值,接受項也需要是字典
def play(obj): #函數定義的動作2
print('%s正在%s%s' %(obj['name'],obj['addr'],obj['type'])) #輸出項目內容,以字典形式傳值,接受項也需要是字典
def init(name,addr,type): #初始化函數把動作和類型放置一起
obj_dic = { #定義的包含動作和類型的字典
'name':name,
'addr':addr,
'type':type,
'eat':eat,
'play':play
}
return obj_dic #返回動作和類型的字典
return init(name,addr,type) #返回動作和類型的對象
s1 = production('小貓','河邊','釣魚') #生產測試
print(s1) #生產類型,輸出包含動作和類型的的項目字典
s1['play'](s1) #總體執行,包含動作和類型,嵌套函數以字典傳值所以函數參數為原函數執行的字典結果
{'name': '小貓', 'addr': '河邊', 'type': '釣魚', 'eat': .eat at 0x0000024E1B3C41E0>, 'play': .play at 0x0000024E1B3C42F0>}
小貓正在河邊釣魚
面向對象編程
面向對象編程獨有語法去實現面向對象設計
# -*- coding:utf8 -*-
class Test: #定義類的類型
def eat(obj): #函數定義的動作1
print('在%s有一個%s的%s' %(s1.b,s1.c,s1.a)) #輸出項目內容,從初始化函數中調用
def play(obj): #函數定義的動作2
print('%s正在%s%s' %(s1.a,s1.b,s1.c)) #輸出項目內容,從初始化函數中調用
def __init__(self,name,addr,type): #初始化函數
self.a = name
self.b = addr
self.c = type
s1 = Test('小貓','河邊','釣魚') #生產測試
print(s1) #生產類型,輸出實例化對象
s1.play() #總體執行,包含動作和類型
小貓正在河邊釣魚
總結
以上是生活随笔為你收集整理的python 面向对象编程简称_Python基础-面向对象编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 三菱plc,三菱FX系列PLC编
- 下一篇: 微型计算机频繁死机的原因,电脑经常死机是