這篇文章主要介紹了深入講解Python中面向對象編程的相關知識,是Python入門學習中的基礎知識,需要的朋友可以參考下
Python從第一天開始就是面向對象的語言。正因為如此,創建和使用類和對象是非常地容易。本章將幫助您在使用Python面向對象編程的技術方面所有提高。
如果沒有任何以往面向對象(OO)的編程的經驗,那麼可能要了解一些基本的入門課程就可以了,或者至少某種形式的教程,讓你有了解基本概念。
但是,這裡會比較少地介紹面向對象編程(OOP):
OOP術語概述
類: 用戶定義的原型對象,它定義了一套描述類的任何對象的屬性。屬性是數據成員(類變量和實例變量)和方法,通過點符號訪問。
類變量:這是一個類的所有實例共享的變量。類變量在類,但外面的任何類的方法定義。類變量不被用作經常作為實例變量。
數據成員:保存與類和對象關聯的數據的類變量或實例變量。
函數重載:一個以上的行為特定功能的分配。執行的操作所涉及的對象(自變量)的類型不同而不同。
實例變量:所定義的方法內,只屬於一個類的當前實例的變量。
繼承:類的特點,即都是由它派生其他類的轉移。
實例:某一類的一個單獨對象。屬於類Circle一個obj對象,例如,是類Circle的一個實例。
實例化:創建一個類的實例。
Method : 一種特殊的函數,函數在類定義中定義。
對象:這是由它的類中定義的數據結構的唯一實例。一個對象包括兩個數據成員(類變量和實例變量)和方法。
運算符重載:一個以上的函數功能,特定的操作符分配。
創建類:
類語句將創建一個新的類定義。類的名稱緊跟在關鍵字class後跟一個冒號,如下所示:
?
1 2 3 class ClassName: 'Optional class documentation string' class_suite類有一個文檔字符串,它可以通過類名.__ doc__訪問。
class_suite由所有定義的類成員,數據屬性與函數組件的語句。
例子
下面是一個簡單的Python類的例子:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salaryempCount是一個類變量,其值將是這個類的所有實例共享。這可以從類中或外部進行訪問,訪問形式為 Employee.empCount。
第一個方法__init__()是一種特殊的方法,這就是所謂的類構造函數或當創建該類的一個新實例Python調用的初始化方法。
聲明就像正常函數中一樣,不同的是第一個參數到每個方法是類的方法。 Python增加了self參數列表;不需要把調用的方法都它列入。
創建實例對象:
要創建一個類的實例,調用類名並傳遞任何參數給__init__方法接收。
?
1 2 3 4 "This would create first object of Employee class" emp1 = Employee("Zara", 2000) "This would create second object of Employee class" emp2 = Employee("Manni", 5000)訪問屬性:
可以訪問使用點運算符來訪問對象的屬性。而類變量使用類名來訪問,如下所示:
?
1 2 3 emp1.displayEmployee() emp2.displayEmployee() print "Total Employee %d" % Employee.empCount現在,把所有的概念放在一起:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/usr/bin/python class Employee: 'Common base class for all employees' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary "This would create first object of Employee class" emp1 = Employee("Zara", 2000) "This would create second object of Employee class" emp2 = Employee("Manni", 5000) emp1.displayEmployee() emp2.displayEmployee() print "Total Employee %d" % Employee.empCount當執行上面的代碼,產生以下結果:
?
1 2 3 Name : Zara ,Salary: 2000 Name : Manni ,Salary: 5000 Total Employee 2在任何時候可以添加,刪除或修改類和對象的屬性:
?
1 2 3 emp1.age = 7 # Add an 'age' attribute. emp1.age = 8 # Modify 'age' attribute. del emp1.age # Delete 'age' attribute.除了使用正常的語句來訪問屬性,可以使用以下函數:
getattr(obj, name[, default]) : 訪問對象的屬性。
hasattr(obj,name) : 檢查一個屬性是否存在。
setattr(obj,name,value) : 設置一個屬性。如果屬性不存在,那麼它將被創建。
delattr(obj, name) : 要刪除一個屬性。
?
1 2 3 4 hasattr(emp1, 'age') # Returns true if 'age' attribute exists getattr(emp1, 'age') # Returns value of 'age' attribute setattr(emp1, 'age', 8) # Set attribute 'age' at 8 delattr(empl, 'age') # Delete attribute 'age'內置的類屬性:
每個Python類會繼續並帶有內置屬性,他們可以使用點運算符像任何其他屬性一樣來訪問:
__dict__ : 字典包含類的命名空間。
__doc__ : 類的文檔字符串,或None如果沒有定義。
__name__: 類名稱。
__module__: 在類中定義的模塊名稱。此屬性是在交互模式其值為“__main__”。
__bases__ : 一個可能是空的元組包含了基類,其在基類列表出現的順序。
對於上面的類,嘗試訪問這些屬性:
?
1 2 3 4 5 6 7 8 9 10