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()
運作結果:
我們建立新的執行個體時,也就是下面13,14行所代表的,我們在括号裡指定的參數自動吸收到 "__init__" 方法中,可以通過"passed_name","passed_number"進行通路
類定義中的 "self" 又是怎麼一回事呢?,它用于引用對象自己的變量拷貝。如果我們忽略 "self",Python就會創立一個臨時變量用于指定的方法和其他的地方。而"self" 告訴Python,這個變量儲存在對象中,并在對象的所有方法裡共享。是以後面的"first"還有"second" 對象有自己的"name"和"number"變量(屬性),而"second" 對象有這些變量的另一個拷貝。
我們試試将開始的"first" 中的參數改改,就在上面的程式的後面改
我們就更新了建立執行個體時設定的值,并再次顯示它們
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)
這個程式相比上面的程式,多了計數功能,我們雖然可以在主函數中,用一個單獨的變量完成這項工作,但為了子產品化,我們還是打算在"類"内部完成。