1. 程式人生 > 其它 >淺談面向物件程式設計

淺談面向物件程式設計


python而言 面向物件程式設計屬於重點中的重點 你現在覺得面向過程也能搞定 對是這樣可以不使用面向物件程式設計
但是 面向物件程式設計可以高度整合你程式碼 犧牲可讀性的同時增加了後期的易維護特性 隨著你的進步你需要不斷優化
你的程式設計 需要考慮程式碼的維護、可讀性等各類因素
這些你看似可以不用的技術決定了你程式的高度和水平




score_dic = {'張三':0,'李四':100}
#建立一個學生類
class Student():
school_name = '家裡蹲大學'
def __init__(self,name,age,id):
self.name = name
self.age = age

self.id = id
def check_score(self,name):#學生查成績的方法
score =score_dic.get(name)
return score
@classmethod
def check_score_func(cls,name):
# 兩個引數 cls、name 用類去呼叫預設會把類本身作為第一個引數傳入
#用類去呼叫你只需要傳name即可 這就是@classmethod的功勞 把這個方法定義為了'類方法'
#類專用的方法 而且享受vip服務也就是繫結方法特性自動傳引數

result = score_dic.get(name)
return result
#一、通過物件呼叫屬性
stu_obj = Student('張三',18,20201140)#例項化產生物件
score = stu_obj.check_score('張三')#物件呼叫查詢成績的方法 注意和下面的類呼叫對比看一下
print(score)
print(stu_obj.school_name)#呼叫屬性直接點就可以
'''
物件呼叫方法check_score()這個方法需要兩個引數self、name 你只需要傳name
第一個引數self就是物件本身 在物件呼叫方法時有繫結方法這個特性所以會自動幫你傳入

'''
#二、通過類直接呼叫類的屬性
Student.check_score('李四')
#TypeError: check_score() missing 1 required positional argument: 'name'
#報錯資訊是啥 少一個引數 很顯然缺少物件引數
Student.check_score(stu_obj,'李四')
#這個手動把物件作為第一個引數傳入就不會有問題了
#所以總結一下這個類中定義的方法就是給vip使用者用的 也就是提供給物件呼叫 類直接呼叫可以是可以但是沒有vip服務
#當然也有一些手段可以給類提供vip服務 '@classmethed'這個東西就可以 繼續往下看
score = Student.check_score_func('李四')
print(score)
'''
__init__方法內的屬性是類獨有的東西 比如學生他們都有姓名 年齡 學號

dtu_obj物件在呼叫類中的方法的時候 由於繫結方法的特性 預設會把物件作為第一個引數傳入
所以類中的方法多數情況是給物件使用的 雖然類本身也可以使用 但是類在呼叫類中的屬性時 不會有繫結的說法
需要幾個引數你就要傳幾個引數 麻煩

@classmethod 定義為類方法 類可以直接呼叫 並且也有繫結特性 預設把類名作為第一個引數傳入
物件的特性--多型(物件有多用屬性 集於一身)、封裝(高度整合程式碼)、繼承(重用父類屬性 減少程式碼重複)

多繼承下的屬性查詢順序 遵循mbr基類查詢順序
新式類:廣度類(所有的父類分支都找一遍如果還沒找到 最後再去找老祖宗)
經典類:深度查詢(一條道查到黑 找不到再去其它分支找)

面向物件程式設計還有一部分內容這裡就不說了 一定要研究
'''

本文來自部落格園,作者:{落葉給樹的留言},轉載請註明原文連結:https://www.cnblogs.com/luoyegeishudeliuyan/p/15548053.html