Python是一門面向對象語言。python
一、面向對象技術介紹編程
二、建立python類數據結構
python使用 class 語句來建立一個新類,class 以後爲類的名稱並以冒號結尾:編程語言
class ClassName: '類的幫助信息' #類文檔字符串 class_suite #類體
類的幫助信息能夠經過ClassName.__doc__查看。ide
class_suite 由類成員,方法,數據屬性組成。函數
python類舉例:ui
#!/usr/bin/python # -*- coding: UTF-8 -*- class Employee: '全部員工的基類' 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
empCount 變量是一個類變量,它的值將在這個類的全部實例之間共享。你能夠在內部類或外部類使用 Employee.empCount 訪問。spa
第一個方法__init__()方法是一種特殊的方法,被稱爲類的構造函數或初始化方法,當建立了這個類的實例時就會調用該方法設計
self 表明類的實例,self 在定義類的方法時是必須有的,雖然在調用時沒必要傳入相應的參數。code
三、建立類的實例對象
實例化類其餘編程語言中通常用關鍵字 new,可是在 Python 中並無這個關鍵字,類的實例化相似函數調用方式。
如下使用類的名稱 Employee 來實例化,並經過 __init__ 方法接受參數。
您可使用點(.)來訪問對象的屬性。
舉例:
#!/usr/bin/python # -*- coding: UTF-8 -*- class Employee: '全部員工的基類' 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 "建立 Employee 類的第一個對象" emp1 = Employee("Zara", 2000) "建立 Employee 類的第二個對象" emp2 = Employee("Manni", 5000) emp1.displayEmployee() emp2.displayEmployee() print "Total Employee %d" % Employee.empCount
執行結果:
Name : Zara ,Salary: 2000 Name : Manni ,Salary: 5000 Total Employee 2
四、python內置類屬性
Python內置類屬性調用實例以下:
#!/usr/bin/python # -*- coding: UTF-8 -*- class Employee: '全部員工的基類' 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 print "Employee.__doc__:", Employee.__doc__ print "Employee.__name__:", Employee.__name__ print "Employee.__module__:", Employee.__module__ print "Employee.__bases__:", Employee.__bases__ print "Employee.__dict__:", Employee.__dict__
執行結果:
Employee.__doc__: 全部員工的基類 Employee.__name__: Employee Employee.__module__: __main__ Employee.__bases__: () Employee.__dict__: {'__module__': '__main__', 'displayCount': <function displayCount at 0x00000000027664A8>, 'empCount': 0, 'displayEmployee': <function displayEmployee at 0x0000000002766518>, '__doc__': '\xe6\x89\x80\xe6\x9c\x89\xe5\x91\x98\xe5\xb7\xa5\xe7\x9a\x84\xe5\x9f\xba\xe7\xb1\xbb', '__init__': <function __init__ at 0x0000000002766438>}
五、python類的繼承
繼承語法 :
#基類名寫在括號裏,基本類是在類定義的時候,在元組之中指明的。在繼承元組中列了一個以上的類,那麼它就被稱做"多重繼承" class SubClassName (ParentClass1[, ParentClass2, ...]): 'Optional class documentation string' class_suite
在python中繼承中的一些特色:
舉例:
#!/usr/bin/python # -*- coding: UTF-8 -*- class Parent: # 定義父類 parentAttr = 100 def __init__(self): print "調用父類構造函數" def parentMethod(self): print '調用父類方法' def setAttr(self, attr): Parent.parentAttr = attr def getAttr(self): print "父類屬性 :", Parent.parentAttr class Child(Parent): # 定義子類 def __init__(self): print "調用子類構造方法" def childMethod(self): print '調用子類方法' def childMethod1(self): Parent.parentMethod(self) #這個是子類中調用父類方法,參數必定要加上self c = Child() # 實例化子類 c.childMethod() # 調用子類的方法 c.parentMethod() # 調用父類方法 c.childMethod1() c.setAttr(200) # 再次調用父類的方法 - 設置屬性值 c.getAttr() # 再次調用父類的方法 - 獲取屬性值
執行結果:
調用子類構造方法 調用子類方法 調用父類方法 調用父類方法 父類屬性 : 200
六、python方法重寫
若是你的父類方法的功能不能知足你的需求,你能夠在子類重寫你父類的方法
舉例:
#!/usr/bin/python # -*- coding: UTF-8 -*- class Parent: # 定義父類 def myMethod(self): print '調用父類方法' class Child(Parent): # 定義子類 def myMethod(self): print '調用子類方法' c = Child() # 子類實例 c.myMethod() # 子類調用重寫方法
執行結果:
調用子類方法
七、python類屬性和方法
Python不容許實例化的類訪問私有數據,但你可使用 object._className__attrName 訪問屬性。
舉例:
#!/usr/bin/python # -*- coding: UTF-8 -*- class JustCounter: __secretCount = 0 # 私有變量 publicCount = 0 # 公開變量 def publiccount(self):# 公共方法 self.__secretCount += 1 self.publicCount += 1 print self.__secretCount def __secretcount1(self):# 私有方法 self.__secretCount += 1 self.publicCount += 1 print self.__secretCount counter = JustCounter() counter.publiccount() counter._JustCounter__secretcount1() print counter.publicCount print counter._JustCounter__secretCount printcounter.__secretCount# # 報錯,實例不能訪問私有變量
執行結果:
C:\Users\sea\PycharmProjects\test1\venv\Scripts\python.exe C:/Users/sea/PycharmProjects/test1/testfile1.py Traceback (most recent call last): File "C:/Users/sea/PycharmProjects/test1/testfile1.py", line 23, in <module> printcounter.__secretCount# # 報錯,實例不能訪問私有變量 NameError: name 'printcounter' is not defined 1 2 2 2
八、python類的方法和屬性單下劃線、雙下劃線、頭尾雙下劃線說明
__foo__: 定義的是特殊方法,通常是系統定義名字 ,相似 __init__() 之類的。
_foo: 以單下劃線開頭的表示的是 protected 類型的變量,即保護類型只能容許其自己與子類進行訪問,不能用於 from module import *
__foo: 雙下劃線的表示的是私有類型(private)的變量, 只能是容許這個類自己進行訪問了。