1. 程式人生 > >Python面向物件1:基礎介紹+封裝特徵

Python面向物件1:基礎介紹+封裝特徵

目前有三種程式設計方式:

  • 面向過程:根據業務邏輯從上到下寫壘程式碼

  • 函式式:將某功能程式碼封裝到函式中,日後便無需重複編寫,僅呼叫函式即可

  • 面向物件:對函式進行分類和封裝,讓開發“更快更好更強...”

java只支援面向物件程式設計;python支援函數語言程式設計、面向物件程式設計

1、面向物件其實就是對類和物件的使用

案例1:函數語言程式設計和麵向物件程式設計初步比較

#函數語言程式設計執行方法:【執行函式】

def mail(email,messge):
print("可以傳送郵件了")
return True
mail("[email protected]","Hello")#通過執行函式執行

#面向物件程式設計:【建立物件】【通過物件執行方法】

class Foo:#建立類
   # 定義方法
   
def mail(self,email,messge):#函式寫在類裡,叫方法,且必須含有self引數
       
print("可以發郵件了")
return True
#呼叫方法:
obj=Foo()#先建立物件:類名()
#再通過物件去執行物件中的方法
obj.mail("[email protected]","Hello")

建立物件及使用的步驟:

a建立類

      class類名():

   def 方法名(self,xxx):#xxx是我們需要傳的引數,self是必須的引數

               pass

b.建立物件

    物件=類名()

c.通過物件執行方法

    物件.方法名(123)#123為傳入的引數

總結:

  • 面向物件含有兩個特殊的東西:類、物件;

  • 面向物件程式設計其實就是對 “類” 和 “物件” 的使用。

  • 類就是一個模板,模板裡可以包含多個函式(也即方法),函式是用來實現各種功能的

  • 物件則是根據模板建立的例項,通過例項物件可以執行類中的函式(方法)

    類的方法與普通的函式只有一個特別的區別——它們必須有一個額外的第一個引數名稱, 按照慣例它的名稱是self。

2、面向物件的三大特性是指:封裝、繼承和多型。

2-1 封裝:

    使用構造方法將內容封裝到物件中,然後通過物件直接或者self間接獲取被封裝的內容

  • 將內容封裝到某處

  • 從某處呼叫被封裝的內容

案例2-1:封裝方法1:將引數值在物件中一個個封裝,通過物件直接呼叫,這是初級的笨方法。

self是python自動會給傳值的引數,哪個物件執行方法,self就是誰;比如obj1執行時,self就代指obj1,取各種賦值的引數

class SQLHelper():
def fetch(self, sql):
print(self.name)
print(sql)
def create(self, ad):
print(ad)
def remove(self, nig):
print(nig)
#執行物件1
obj1 = SQLHelper() # 建立物件1,self就是指obj1
obj1.hhost = "c1.hhh.com"  # 賦值
obj1.name = '物件1'
obj1.pwd = 123
obj1.fetch("select * from A") # 呼叫物件的fetch方法
#執行物件2
obj2 = SQLHelper() # 建立物件2,self就是指obj2
obj2.hhost = "c1.ddd.com"
obj2.name = '物件2'
obj2.pwd = 4333
obj2.fetch("select * from B") # 呼叫物件的fetch方法

執行結果:

案例2-2:封裝方法二:將引數值一次性封裝進物件,呼叫時,通過物件直接呼叫被封裝的內容

class SQLhelper:#建立物件
   # 封裝引數,相同的值/引數直接放到一個地方,即init方法
   
def __init__(self,a1,a2,a3):
print('物件後面加括號,自動執行init方法')
self.hhost=a1
self.name=a2
self.pwd=a3
#呼叫物件1:
obj1=SQLhelper('c1.hhh.com','物件1',123) #執行init方法
print(obj1.name)# 直接呼叫obj1物件的name屬性
print(obj1.pwd)# 直接呼叫obj1物件的pwd屬性
#呼叫物件2
obj2=SQLhelper('c1.dddd.com','物件2',4333) #執行init方法
print(obj2.name)# 直接呼叫obj2物件的name屬性
print(obj2.pwd)# 直接呼叫obj2物件的pwd屬性

執行結果:

案例2-3:呼叫方法:執行類中的方法時,需要通過self間接呼叫被封裝的內容

class SQLhelper:#定義物件
   
def __init__(self,a1,a2,a3):#封裝引數,相同的值/引數直接放到一個地方,即init方法
       
print('物件後面加括號,自動執行init方法')
self.hhost=a1
self.name=a2
self.pwd=a3
def detail(self):#通過封裝方法呼叫引數
       
print(self.hhost)
print(self.name)
#呼叫
obj1=SQLhelper('c1.hhh.com','物件1',123) #執行init方法
obj1.detail()
obj2=SQLhelper('c1.dddd.com','物件2',4333) #執行init方法
obj2.detail()

執行結果:

案例3:封裝與呼叫三種方法比較的案例,通過巢狀呼叫封裝的引數

class c1:
def __init__(self,name,obj):
self.name=name
self.obj=obj

class c2:
def __init__(self,name,age):
self.name=name
self.age=age
def show(self):
print(self.name)
class c3:
def __init__(self,a1):
self.money=333 #如果money不需要傳引數,就不需要放在init方法中了
     
self.aaa=a1 #a1是引數,aaa是c3的引數

c2_object=c2("c2name",11)#例項化c2物件
#c2_object是c2型別
#name="c2name"
#age=11
#包含show方法
c1_object=c1("c1name",c2_object)#例項化c1物件
##c1_object是c1型別,巢狀c2_object
#name="c1name"
#obj=c2_object,包含c2_object的全部引數(name="c2name",age=11,show方法)

c3_object=c3(c1_object)#例項化c3物件
#c3_object是c3型別,巢狀c1_object
#money=333,是固定引數
#aaa=c1_object,即包含c1_object的全部引數(name="c1name"、obj=c2_object)

#呼叫方法:
c2_object.show()#方法1,通過c2_object
c1_object.obj.show()#方法2:通過c1_object的obj屬性呼叫
c3_object.aaa.obj.show()#方法3:通過c3_object的aaa屬性呼叫

執行結果:三種方法的效果是一致的

案例4:案例比較函式和麵向物件程式設計:

  • 如果使用函數語言程式設計,需要在每次執行函式時傳入相同的引數,如果引數多的話,又需要貼上複製了...  ;

  • 而對於面向物件程式設計只需要在建立物件時,將所有需要的引數全部封裝到當前物件中,之後再次使用時,通過self間接去當前物件中取值即可。

題目:

  • 小明,10歲,男,上山去砍柴

  • 小明,10歲,男,開車去東北

  • 小明,10歲,男,最愛打地主

  • 老李,90歲,男,上山去砍柴

  • 老李,90歲,男,開車去東北

  • 老李,90歲,男,最愛打地主

  • ....

  • 老張...

#函數語言程式設計實現方法:

class Foo():
def __init__(self,name,age,gender):
self.name=name
self.age = age
self.gender = gender
def shangshan(self):
print("姓名{},{}歲,{},上山去砍柴".format(self.name,self.age,self.gender))
def kaiche(self):
print("姓名{},{}歲,{},開車去東北".format(self.name,self.age,self.gender))
def love(self):
print("姓名{},{}歲,{},喜歡打地主".format(self.name,self.age,self.gender))
#呼叫物件1,小明
xiaoming=Foo("小明","10","男")
xiaoming.shangshan()
xiaoming.kaiche()
xiaoming.love()
#呼叫物件2,小劉
liu=Foo("小劉","20","女")
liu.shangshan()
liu.kaiche()

執行結果:

課程參考:老男孩python課程

案例連結:https://pan.baidu.com/s/1i5d9ihn 密碼:mgv6

相關推薦

Python面向物件1基礎介紹+封裝特徵

目前有三種程式設計方式:面向過程:根據業務邏輯從上到下寫壘程式碼函式式:將某功能程

python 面向物件程式設計類和例項

深度學習在構建網路模型時,看到用類來構建一個模型例項,清晰明瞭,所以這篇博文主要學習一下python類 類和例項: 類可以起到模板的作用,因此,可以在建立例項的時候,把一些我們認為必須繫結的屬性強制填寫進去。通過定義一個特殊的__init__(注意:特殊方法“__init__”前後分別有

python面向物件入門從程式碼複用開始

本文從程式碼複用的角度一步一步演示如何從python普通程式碼進化到面向物件,並通過程式碼去解釋一些面向物件的理論。所以,本文前面的內容都是非面向物件的語法實現方式,只有在最結尾才給出了面向物件的簡單語法介紹。各位道兄不妨一看,如果留下點筆墨指導,本人感激不盡。 最初程式碼 3種動物牛Cow、羊Sheep、

python屬性管理(1)基礎

管理屬性的幾種方式 在python中訪問、設定、刪除物件屬性的時候,有以下幾種方式: 使用內建函式getattr()、setattr()和delattr() 自己編寫getter()、setter()、deleter()方法 過載__getattr__()、__setattr__()、_

C語言面向物件程式設計封裝與繼承(1

最近在用 C 做專案,之前用慣了 C++ ,轉回頭來用C 還真有點不適應。 C++ 語言中自帶面向物件支援,如封裝、繼承、多型等面向物件的基本特徵。 C 原本是面向過程的語言,自身沒有內建這些特性,但我們還是可以利用 C 語言本身已有的特性來實現面向物件的一些基本特徵。接下來我們就一一來細說封裝、繼

Python面向物件基礎2設定物件屬性

用類儲存資料 類實際上就是一個數據結構,對於python而言,它是一個類似於字典的結構。當根據類建立了物件之後,這個物件就有了一個數據結構,包含一些賦值了的屬性。在這一點上,它和其它語言的struct的作用是類似的:儲存資料並提供資料檢索功能。 例如,下面是史上最簡單的類: class Person

Python面向物件基礎編碼細節和注意事項!

在前面,我用了3篇文章解釋python的面向物件: 面向物件:從程式碼複用開始 面向物件:設定物件屬性 類和物件的名稱空間 本篇是第4篇,用一個完整的示例來解釋面向物件的一些細節。 例子的模型是父類Employe和子類Manager,從類的定義開始,一步步完善直到類

python - 面向物件的三大特徵封裝、繼承、多型

面向物件三大特性 1.封裝:根據職責將屬性和方法封裝到一個抽象的類中 2.繼承:實現程式碼的重用,相同的程式碼不需要重複的寫 -3.多型 單繼承: 子類擁有父類的所有方法和屬性(子類只需封裝自己特有的方法) 舉例: class Animal: #

Python基礎(三)--- Python面向物件oop,類、方法和變數,繼承

一、面向物件oop ----------------------------------------------------- 1.類 用來描述具有相同的屬性和方法的物件的集合。 它定義了該集合中每個物件所共有的屬性和方法。 物件是類的例項。

python中的面向物件學習以及類的封裝(這篇文章初學者一定要好好看)

這篇文章對於初學者可以很有效的理解面對過程、面對物件 一、首先介紹一下面向過程和麵向物件的比較: 面向過程 VS 面向物件 程式設計正規化 程式設計是程式設計師用特定的語法+資料結構+演算法組成的程式碼來告訴計算機如何執行任務的過程 , 一個程式是程式設計師為了得到一個任務結果而

python面向物件三大特性之一封裝

一、什麼是封裝   在程式設計中,封裝(Encapsulation)是對具體物件的一種抽象,即將某些部分隱藏起來,在程式外部看不到,其 含義是其他程式無法呼叫。   要了解封裝,離不開“私有化”,就是將類或者是函式中的某些屬性限制在某個區域之內,外部無法呼叫。   二、為什麼要封裝   封裝資料的主

Python面向物件基礎

NOTE:重要強調:    Python的作用域和名稱空間(1)名稱空間 是從命名到物件的對映    ①內建名稱空間    ②全域性名稱空間:模組    ③本地名稱空間:模組中的函式和類(2)作用域   是一個 Python 程式可以直接訪問名稱空間的正文區域    一:簡介            類:用來描

面向物件思想類和物件封裝、建構函式

面向物件的特點: 面向物件是一種更符合我們思考習慣的思想,它可以將複雜的事件簡單化,並將我們從執行者變成指揮者。 面向過程-強調步驟 面向過程-強調物件,這裡的物件就是洗衣機。 面向物件的語

我的Python成長之路--Day25--面向物件的三大特性介紹01(繼承和派生)

面向物件一共有三個重要的特性,分別是:繼承、多型和封裝.今天來具體介紹一下繼承相關的知識點 1.什麼是繼承? 在程式中繼承是一種新建類的方式,新建立的類稱之為子類/派生類,被繼承的類稱之為父類/基類/超類 繼承描述的是一種遺傳關係,子類可以重用父類的屬性 2.為什麼要用

python面向物件基礎02

初始化方法:__init__ class Cat: def __init__(self): print("這是一個初始化方法") tom = Cat() 使用類名()建立物件時,會自動呼叫__init__方法 在初始化方法內部定義屬性 c

視訊編解碼的理論和實踐1基礎知識介紹

近幾年,視訊編解碼技術在理論及應用方面都取得了重大的進展,越來越多的人想要了解編解碼技術。因此,網易雲信研發工程師為大家進行了歸納梳理,從理論及實踐兩個方面簡單介紹視訊編解碼技術。 相關閱讀推薦 1、視訊介紹 視訊的本質是影象序列,根據視覺暫留的原理

面向物件程式設計的 3 個主要特徵封裝性、繼承性、多型性

封裝性:封裝是一種資訊隱蔽技術,它體現於類的說明,是物件的重要特性。封裝使資料和加工該資料的方法(函式)封裝為一個整體,以實現獨立性很強的模組,使得使用者只能見到物件的外特性(物件能接受哪些訊息,具有哪些處理能力),而物件的內特性(儲存內部狀態的私有資料和實現加工能力的演算法

面向物件程式設計封裝,繼承,多型

面向物件的三大特徵:封裝,繼承,多型 封裝 封裝概述 類 方法 程式碼塊 封裝的好處 繼承 繼承概述 關鍵字this與super final關鍵字 繼承的優點與弊端