天天看點

手把手教你python面向對象程式設計_Python 面向對象程式設計

Python 面向對象程式設計

在本文中,您将通過示例了解Python中的面向對象程式設計(OOP)及其基本概念。

Python OOP簡介

Python是一種多範式程式設計語言。意思是說,它支援不同的程式設計方法。

解決程式設計問題的一種流行方法是建立對象。也就是所謂的面向對象程式設計(OOP)。

一個對象具有兩個特征:屬性

行為

讓我們舉個示例:

鹦鹉是一個物體,名稱,年齡,顔色是屬性

唱歌,跳舞都是行為

Python中的OOP概念專注于建立可重用的代碼。此概念也稱為DRY(Don't Repeat Yourself)不要重複自己。

在Python中,OOP的概念遵循一些基本原則:繼承使用新類的詳細資訊而不修改現有類的過程。

封裝對其他對象隐藏類的私有細節。

多态對不同的資料輸入以不同的方式使用通用操作的概念。

類(class)

類是對象的藍圖。

我們可以将類看作是帶有标簽的鹦鹉的素描。它包含有關名稱,顔色,大小等的所有詳細資訊。基于這些描述,我們可以研究鹦鹉。在這裡,鹦鹉是一個對象。

鹦鹉類的示例可以是:class Parrot:

pass

在這裡,我們使用class關鍵字來定義一個空類Parrot。我們從類中構造示例。示例是由特定類建立的特定對象。

對象(Object)

對象(示例)是類的示例。定義類時,僅定義對象的描述。是以,沒有配置設定記憶體或存儲。

鹦鹉類對象的示例可以是:obj = Parrot()

在這裡,obj是Parrot類的對象。

假設我們有鹦鹉的詳細資訊。下面,我們将展示如何建構鹦鹉的類和對象。

示例1:在Python中建立類和對象

示例class Parrot:

# 類屬性

species = "鳥"

# 示例屬性

def __init__(self, name, age):

self.name = name

self.age = age

# 示例化Parrot類

blu = Parrot("麻雀", 10)

woo = Parrot("鹦鹉", 15)

# 通路類屬性

print("麻雀是 {}".format(blu.__class__.species))

print("鹦鹉也是 {}".format(woo.__class__.species))

# 通路示例屬性

print("{} 有 {} 歲".format( blu.name, blu.age))

print("{} 有 {} 歲".format( woo.name, woo.age))

當我們運作程式時,輸出将是:麻雀是 鳥

鹦鹉也是 鳥

麻雀 有 10 歲

鹦鹉 有 15 歲

在上面的程式中,我們建立一個名為Parrot的類。然後,我們定義屬性。屬性是對象的特征。

然後,我們建立Parrot類的示例。在這裡,blu和woo是我們新對象的引用(值)。

然後,我們使用class .species通路class屬性。類的所有示例的類屬性都是相同的。類似地,我們使用blu.name和blu.age通路示例屬性。但是,對于類的每個示例,示例屬性都是不同的。

要了解有關類和對象的更多資訊,請轉到Python類和對象。

方法

方法是在類主體内定義的函數。它們用于定義對象的行為。

示例2:在Python中建立方法

示例class Parrot:

# 示例屬性

def __init__(self, name, age):

self.name = name

self.age = age

# 示例方法

def sing(self, song):

return "{} sings {}".format(self.name, song)

def dance(self):

return "{} is now dancing".format(self.name)

# 示例化對象

blu = Parrot("Blu", 10)

# 調用我們的示例方法

print(blu.sing("'Happy'"))

print(blu.dance())

當我們運作程式時,輸出将是:Blu sings 'Happy'

Blu is now dancing

在上面的程式中,我們定義了兩種方法,即sing()和dance()。 這些之是以稱為示例方法,是因為它們是在示例對象(即blu)上調用的。

繼承性

繼承是一種建立新類的方法,用于在不修改現有類的細節的情況下使用它。新形成的類是一個派生類(或子類)。類似地,現有類是基類(或父類)。

示例3:在Python中使用繼承

示例# 基類

class Bird:

def __init__(self):

print("鳥準備好了")

def whoisThis(self):

print("鳥")

def swim(self):

print("遊得更快")

# 子類

class Penguin(Bird):

def __init__(self):

# call super() function

super().__init__()

print("企鵝準備好了")

def whoisThis(self):

print("企鵝")

def run(self):

print("跑得更快")

peggy = Penguin()

peggy.whoisThis()

peggy.swim()

peggy.run()

當我們運作該程式時,輸出将是:鳥準備好了

企鵝準備好了

企鵝

遊得更快

跑得更快

在上面的程式中,我們建立了兩個類,即Bird(父類)和Penguin(子類)。子類繼承父類的功能。我們可以從swim()方法中看到這一點。子類再次修改了父類的行為。我們可以從whoisThis()方法中看到這一點。此外,我們通過建立新run()方法來擴充父類的功能。

另外,我們在init()方法之前使用super()函數。這是因為我們希望将init()方法的内容從父類拉到子類中。

可封裝性

在Python中使用OOP,我們可以限制對方法和變量的通路。這樣可以防止資料直接修改(稱為封裝)。在Python中,我們使用下劃線作為字首來表示私有屬性,即單“ _”或雙“ __”。

示例4:Python中的資料封裝

示例class Computer:

def __init__(self):

self.__maxprice = 900

def sell(self):

print("售價: {}".format(self.__maxprice))

def setMaxPrice(self, price):

self.__maxprice = price

c = Computer()

c.sell()

# 改變價格

c.__maxprice = 1000

c.sell()

# 使用setter函數

c.setMaxPrice(1000)

c.sell()

當我們運作該程式時,輸出将是:售價: 900

售價: 900

售價: 1000

在上面的程式中,我們定義了Computer類。我們使用__init__()方法存儲計算機的最高售價。我們試圖修改價格。但是,我們無法更改它,因為Python将__maxprice視為私有屬性。要更改該值,我們使用了setter函數,即setMaxPrice(),它以price為參數。

多态性

多态性是一種功能(在OOP中),可以将公共接口用于多種形式(資料類型)。

假設我們需要給一個形狀上色,有多個形狀選項(矩形,正方形,圓形)。但是,我們可以使用相同的方法為任何形狀着色。這個概念稱為多态。

示例5:在Python中使用多态

示例class Parrot:

def fly(self):

print("鹦鹉會飛")

def swim(self):

print("鹦鹉不會遊泳")

class Penguin:

def fly(self):

print("企鵝不會飛")

def swim(self):

print("企鵝會遊泳")

# 通用接口

def flying_test(bird):

bird.fly()

#示例化對象

blu = Parrot()

peggy = Penguin()

# 傳遞對象

flying_test(blu)

flying_test(peggy)

當我們運作上面的程式時,輸出将是:鹦鹉會飛

企鵝不會飛

在上面的程式中,我們定義了兩個類Parrot和Penguin。它們每個都有通用的fly()方法。但是,它們的功能不同。為了允許多态,我們建立了通用接口,即flying_test()可以接受任何對象的函數。然後,我們在flying_test()函數中傳遞了blu和peggy對象,它有效地運作了。

面向對象程式設計的要點:讓程式設計變得簡單而有效。

類是可共享的,是以可以重複使用代碼。

讓程式設計人員的生産力提高

通過資料抽象,資料是安全的。