天天看點

Python 面向對象程式設計(OOP)—— 類

Python終于學習到面向對象的程式設計思想,希望這對我以後學習java 有更好的鋪墊

目錄

一、什麼是“類”(内容來自Python 趣味程式設計入門)

1.1、x = Myclass()

1.2、x.hello()

1.3、用類實作員工目錄

 1.3.1、self

1.3.2、修改"類"的屬性

1.4、員工目錄(改,記錄員工的數量)

總結:

在面向對象程式設計中,“類”就像一個函數,盡管普通的函數就可以用于整個程式,在OOP中,我們必須建立包含類中資料的“對象”,然後才能使用

#類定義
class Myclass:

    def hello(self): #這個函數在類中稱為方法
        print("Hello,everyone!")

#x即為對象
x = Myclass()

#調用對象為“hello”的方法
x.hello()

#令一個對象
y = Myclass()
y.hello()           

這個“類”定義,有點像我們之前做過的函數的定義,忘記函數怎麼定義或者其他問題的的小夥伴可以看我的這篇部落格

Python中的函數使用

接着上面的,類定義本身并不能做任何事,它是一個模闆。在類定義中,我們建立了一個簡單函數 "hello()" ——類中的函數都稱做 "方法"。(PS:我們在class 後面定義的 Myclass 第一個字母是da大寫,其實小寫也可以,但是為了了以後方面,這裡用大寫,以後我們在代碼中遇到就可以立刻知道,這個代碼建立了一個 "類",而不止是運作了一個普通的函數)

前面說道,我們定義的隻是一個模闆,我們并沒有使用它,在 x = Myclass()這一行中,這是一個類,而不是函數,這裡我建立了一個"Myclass"的執行個體,并将結果放到"x"當中,這個時候,"x"  不再是一個普通變量,而是一個包含類定義的所有變量及函數的"對象"。

x.hello()這句話中,”x“本身就包含了 "hello()"函數的一個拷貝,x後面加了一個 ".",我們就可以通路它的函數的 方法,後面的"y" 和"x" 之間是一樣的道理,不過 "y" 是一個單獨的對象,兩個對象都是開始時定義的類模闆的執行個體,但是它們獨立于記憶體中,可以用作不同的目的

上面這個程式,我們定義了x,y這兩個執行個體,但是定義兩個相同的執行個體而不做任何事情是沒有任何意義的。下面我就用另一個執行個體來看看在一個包含變量和可變資料的類,我們用初始化方式,使類的新執行個體在建立時自動執行:回到前面我們用字典創立員工名單的執行個體,執行個體一,這一次為每個員工建立對象,而不用字典這個資料結構試試看看,當我們建立對象時,可以向"__init__"  方法傳遞執行個體,設定局部變量

class Employee:
    #這個方法在對象建立時自動執行
    def __init__(self,passed_name,passed_number):

        self.name = passed_name#執行個體變量,也成屬性,員工的姓名

        self.number = passed_number#員工的号碼

    def show(self):
        print("Name:",self.name)
        print("Number:",self.number)

first = Employee("Bob",1234)
second = Employee("Gorit",2247)

first.show()
second.show()           

運作結果:

Python 面向對象程式設計(OOP)—— 類

 我們建立新的執行個體時,也就是下面13,14行所代表的,我們在括号裡指定的參數自動吸收到 "__init__" 方法中,可以通過"passed_name","passed_number"進行通路

Python 面向對象程式設計(OOP)—— 類

類定義中的 "self" 又是怎麼一回事呢?,它用于引用對象自己的變量拷貝。如果我們忽略 "self",Python就會創立一個臨時變量用于指定的方法和其他的地方。而"self" 告訴Python,這個變量儲存在對象中,并在對象的所有方法裡共享。是以後面的"first"還有"second" 對象有自己的"name"和"number"變量(屬性),而"second" 對象有這些變量的另一個拷貝。

我們試試将開始的"first" 中的參數改改,就在上面的程式的後面改

Python 面向對象程式設計(OOP)—— 類
Python 面向對象程式設計(OOP)—— 類

 我們就更新了建立執行個體時設定的值,并再次顯示它們

class Employee:
    #這裡我們的目的時為了跟蹤員工的數量而設定的參數
    employee_count = 0
    #這個方法在對象建立時自動執行
    def __init__(self,passed_name,passed_number):
        self.name = passed_name#執行個體變量,也成屬性,員工的姓名
        self.number = passed_number#員工的号碼
        Employee.employee_count += 1

    def show(self):
        print("Name:",self.name)
        print("Number:",self.number)

first = Employee("Bob",1234).show()
second = Employee("Gorit",2247).show()
third = Employee("White",2790).show()

print("Number of employees",Employee.employee_count)           
Python 面向對象程式設計(OOP)—— 類

這個程式相比上面的程式,多了計數功能,我們雖然可以在主函數中,用一個單獨的變量完成這項工作,但為了子產品化,我們還是打算在"類"内部完成。