Python語法—物件
Python語法—物件
物件導向
Python從設計之初就已經是一門物件導向的語言,正因為如此,在Python中建立一個類和物件是很容易的。本章節我們將詳細介紹Python的物件導向程式設計。
如果你以前沒有接觸過物件導向的程式語言,那你可能需要先了解一些面嚮物件語言的一些基本特徵,在頭腦裡形成一個基本的物件導向的概念,這樣有助於你更容易的學習Python的物件導向程式設計。
接下來我們先來簡單的瞭解下物件導向的一些基本特徵。
- 類(Class): 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項。
- 類變數:類變數在整個例項化的物件中是公用的。類變數定義在類中且在函式體之外。類變數通常不作為例項變數使用。
- 資料成員:類變數或者例項變數用於處理類及其例項物件的相關的資料。
- 方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。
- 例項變數:定義在方法中的變數,只作用於當前例項的類。
- 繼承:即一個派生類(derived class)繼承基類(base class)的欄位和方法。繼承也允許把一個派生類的物件作為一個基類物件對待。例如,有這樣一個設計:一個Dog型別的物件派生自Animal類,這是模擬"是一個(is-a)"關係(例圖,Dog是一個Animal)。
- 例項化:建立一個類的例項,類的具體物件。
- 方法:類中定義的函式。
- 物件:通過類定義的資料結構例項。物件包括兩個資料成員(類變數和例項變數)和方法。
建立類
使用class語句來建立一個新類,class之後為類的名稱並以冒號結尾,如下例項:
class ClassName:
‘類的幫助資訊’ #類文件字串
class_suite #類體
以下是一個簡單的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
建立例項物件
例項化類其他程式語言中一般用關鍵字 new,但是在 Python 中並沒有這個關鍵字,類的例項化類似函式呼叫方式。
以下使用類的名稱 Employee 來例項化,並通過 init 方法接受引數。
“建立 Employee 類的第一個物件”
emp1 = Employee(“Zara”, 2000)
“建立 Employee 類的第二個物件”
emp2 = Employee(“Manni”, 5000)
內建類屬性
__dict__ : 類的屬性(包含一個字典,由類的資料屬性組成)
__doc__ :類的文件字串
__name__: 類名
__module__: 類定義所在的模組(類的全名是'__main__.className',如果類位於一個匯入模組mymod中,那麼className.__module__ 等於 mymod)
__bases__ : 類的所有父類構成元素(包含了一個由所有父類組成的元組)
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__
類的繼承
物件導向的程式設計帶來的主要好處之一是程式碼的重用,實現這種重用的方法之一是通過繼承機制。繼承完全可以理解成類之間的型別和子型別關係。
需要注意的地方:繼承語法 class 派生類名(基類名)://… 基類名寫在括號裡,基本類是在類定義的時候,在元組之中指明的。
在python中繼承中的一些特點:
1:在繼承中基類的構造(__init__()方法)不會被自動呼叫,它需要在其派生類的構造中親自專門呼叫。
2:在呼叫基類的方法時,需要加上基類的類名字首,且需要帶上self引數變數。區別於在類中呼叫普通函式時並不需要帶上self引數
3:Python總是首先查詢對應型別的方法,如果它不能在派生類中找到對應的方法,它才開始到基類中逐個查詢。(先在本類中查詢呼叫的方法,找不到才去基類中找)。
如果在繼承元組中列了一個以上的類,那麼它就被稱作"多重繼承" 。
派生類的宣告,與他們的父類類似,繼承的基類列表跟在類名之後,如下所示:
class SubClassName (ParentClass1[, ParentClass2, …]):
‘Optional class documentation string’
class_suite
#!/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 '呼叫子類方法'
c = Child() # 例項化子類
c.childMethod() # 呼叫子類的方法
c.parentMethod() # 呼叫父類方法
c.setAttr(200) # 再次呼叫父類的方法 - 設定屬性值
c.getAttr() # 再次呼叫父類的方法 - 獲取屬性值
你可以使用issubclass()或者isinstance()方法來檢測。
- issubclass() - 布林函式判斷一個類是另一個類的子類或者子孫類,語法:issubclass(sub,sup)
- isinstance(obj, Class) 布林函式如果obj是Class類的例項物件或者是一個Class子類的例項物件則返回true。
方法重寫
如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法:
例項:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Parent: # 定義父類
def myMethod(self):
print '呼叫父類方法'
class Child(Parent): # 定義子類
def myMethod(self):
print '呼叫子類方法'
c = Child() # 子類例項
c.myMethod() # 子類呼叫重寫方法
單下劃線、雙下劃線、頭尾雙下劃線說明:
__foo__: 定義的是特列方法,類似 __init__() 之類的。
_foo: 以單下劃線開頭的表示的是 protected 型別的變數,即保護型別只能允許其本身與子類進行訪問,不能用於 from module import *
__foo: 雙下劃線的表示的是私有型別(private)的變數, 只能是允許這個類本身進行訪問了。
#以上內容整理自summercamp中的學習資料
相關文章
- python 基礎語法之物件導向Python物件
- Python基礎語法(七:類與物件)Python物件
- Python語法Python
- python 語法總結:Python語法快速入門Python
- ES6語法——Promise物件Promise物件
- ES6語法(三) 物件物件
- Python 基本語法Python
- python基礎語法—語句Python
- php基礎語法_物件導向PHP物件
- Python語法—讀寫Python
- python 常用的語法Python
- Python基礎語法Python
- Python的基本語法Python
- 修改python語法注意Python
- python基本語法元素Python
- Python 基礎語法Python
- Python的基礎語法Python
- python 基礎語法(三)Python
- Python基礎語法(二)Python
- Python基礎語法(一)Python
- Python相關語法2Python
- 如何自定義python語法.Python
- Python基礎(06):if語法Python
- 【PYTHON】語法基礎 | 開始使用PythonPython
- 小白自學Python(三)Python基本語法Python
- Python語法的轉義字元Python字元
- Python初級面試語法Python面試
- Python3 基礎語法Python
- Python 語法之裝飾器Python
- Python基礎語法資料Python
- Python爬蟲之XPath語法Python爬蟲
- ES6語法學習筆記之物件簡潔語法,及新增內容筆記物件
- 『Java 語法基礎』物件導向有哪些特性Java物件
- Dart語法篇之物件導向基礎(五)Dart物件
- Python語法—迭代器、生成器Python
- Python 與 JavaScript 語法差異點PythonJavaScript
- python 基礎語法 - 函式(一)Python函式
- 快速掌握Python基礎語法(下)Python