python學習之面向對象知識介紹

ADVERTISEMENT

python學習之面向對象知識介紹

前言

最近在學習Python的面向對象編程,以前是沒有接觸過其它的面向對象編程的語言,因此學習這一部分是相當帶勁的,這里也總結一下。

概述

python支持多種編程範式:面向過程、面向對象、面向切面(裝飾器部分)等。

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

函數式:將某功能代碼封裝到函數中,日後便無需重複編寫,僅調用函數即可

面向對象:對函數進行分類和封裝,讓開發“更快更好更強...”

OOP思想

面向對象的基本哲學:世界由具有各自運動規律和內部狀態的對象組成,對象之間相互作用和通訊構成了世界。

唯一性,世界沒有兩片相同的樹葉,同樣的沒有相同的對象。

分類性,分類是對現實世界的抽象。

三大特性:封裝、繼承和多態

面向對象的三大特性:

一、封裝

封裝,對具體對象的一種抽象,即將某些部分隱藏起來,在程序外部看不到,即無法調用。

私有化:將類或函數中的某些屬性限制在某個區域之內,外部無法調用。

Python中私有化的方法也比較簡單,就是在準備私有化的屬性(包括方法、數據)名字前面加雙下劃線。

例如:

class ProtectMe(object):

def __init__(self):

self.me = "qiwsir"

self.__name = "kivi"

def __python(self):

print("I love Python.")

ADVERTISEMENT

def code(self):

print9"Which language do you like?")

self.__python()

if __name__ == "__main__":

p = ProtectMe()

print(p.me)

print(p.__name)

#運行結果

qiwsir

Traceback (most recent call last):

File "21102.py", line 21, in

print p.__name

AttributeError: 'ProtectMe' object has no attribute '__name'

說明:__name屬性隱藏了,無法調用。

調用私有屬性,可以使用property函數

class ProtectMe(object):

def __init__(self):

self.me = "qiwsir"

self.__name = "kivi"

@property

def name(self):

return self.__name

if __name__ == "__main__":

p = ProtectMe()

ADVERTISEMENT

print(p.name)

#運行結果

kivi

所以,在使用面向對象的封裝特性時,需要:

將內容封裝到某處

從某處調用被封裝的內容

第一步:將內容封裝到某處

self 是一個形式參數,當執行 obj1 = Foo('wupeiqi', 18 ) 時,self 等於 obj1

當執行 obj2 = Foo('alex', 78 ) 時,self 等於 obj2

所以,內容其實被封裝到了對象 obj1 和 obj2 中,每個對象中都有 name 和 age 屬性,在內存里類似於下圖來保存。

第二步:從某處調用被封裝的內容

調用被封裝的內容時,有兩種情況:

通過對象直接調用

通過self間接調用

class Role(object):

ac = None #類變量

def __init__(self,name,role,weapon,life_value):

#初始化方法

self.name = name #實例變量(成員變量)

self.role = role

self.weapon = weapon

self.life_val = life_value

ADVERTISEMENT

def buy_weapon(self,weapon): #定義方法

#self:表示實例本身

self.weapon = weapon

# print("%s is buying [%s]" %(self.name,weapon))

#把一個抽象的類變成一個具體的對象的過程,叫實例化

p1 = Role("sanjiang",'Police',"B10",90) #實例

t1 = Role("Chunyun",'Terrorist',"B11",100)

二、繼承

繼承,面向對象中的繼承和現實生活中的繼承相同,即:子可以繼承父的內容。

class SchoolMember(object):

# member_nums = 0

def __init__(self,name,age,sex):

self.name = name

self.age = age

self.sex = sex

# self.enroll()

def enroll(self):

SchoolMember.member_nums += 1

print("SchoolMember [%s] is enrolled!" %self.name)

def tell(self):

print("Hello my name is [%s]" %self.name)

class Teacher(SchoolMember):

def __init__(self,name,age,sex,course,salary): #重寫父類的__init__方法

super(Teacher,self).__init__(name,age,sex) #繼承(新式類)

# SchoolMember.__init__(self,name,age,sex) #繼承(舊式類)

self.course = course

self.salary = salary

def teaching(self):

print("Teacher [%s] is teaching [%s]" %(self.name,self.course))

class Student(SchoolMember):

def __init__(self,name,age,sex,course,tuition):

super(Student,self).__init__(name,age,sex)

self.course = course

self.tuition = tuition

def pay_tuition(self):

print("ca,student [%s] paying tuition [%s] again" %(self.name,self.tuition))

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

本文地址:

ADVERTISEMENT