Python基本語法之面向物件
面向物件技術簡介
名稱 |
說明 |
類(Class) |
類是用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件是類的例項。 |
方法 |
類中定義的函式。 |
類變數 |
類變數在整個例項化的物件中是公用的。類變數定義在類中且在函式體之外。類變數通常不作為例項變數使用。 |
資料成員 |
類變數或者例項變數用於處理類及其例項物件的相關的資料。 |
方法重寫 |
如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。 |
例項變數 |
定義在方法中的變數,只作用於當前例項的類。 |
繼承 |
即一個派生類(derived class)繼承基類(base class)的欄位和方法。繼承也允許把一個派生類的物件作為一個基類物件對待。例如,有這樣一個設計:一個Dog型別的物件派生自Animal類,這是模擬"是一個(is-a)"關係(Dog是一個Animal)。 |
例項化 |
建立一個類的例項,類的具體物件。 |
物件 |
通過類定義的資料結構例項。物件包括兩個資料成員(類變數和例項變數)和方法。 |
類的專有方法如下,類的方法與普通的函式只有一個特別的區別——它們必須有一個額外的第一個引數名稱, 按照慣例它的名稱是 self。
類的專有方法 |
方法說明 |
__init__ |
建構函式,在生成物件時呼叫 |
__del__ |
解構函式,釋放物件時使用 |
__repr__ |
列印,轉換 |
__setitem__ |
按照索引賦值 |
__getitem__ |
按照索引獲取值 |
__len__ |
獲得長度 |
__cmp__ |
比較運算 |
__call__ |
函式呼叫 |
__add__ |
加運算 |
__sub__ |
減運算 |
__mul__ |
乘運算 |
__truediv__ |
除運算 |
__mod__ |
求餘運算 |
__pow__ |
乘方 |
典型的類示例
class People:
name = ''
__age = 0
def __init__(self, n, a):
self.name = n
self.__age = a
def speak(self):
print("%s say: I am %d years old." %(self.name,self.__age))
p = People('shenzhen', 38)
p.speak()
其中, People為類名,p為類的例項,name為類變數,__age為私有例項變數,__init__(self, n, a)為建構函式,speak為類內普通函式。
示例程式碼執行結果:
類的繼承
繼承是類的最重要的一個特性,類的繼承語法如下:
class DerivedClassName(BaseClassName1):
<statement-1>
.
.
.
<statement-N>
繼承示例程式碼如下:
class People:
name = ''
age = 0
def __init__(self, n, a):
self.name = n
self.age = a
def speak(self):
print("%s say: I am %d years old." %(self.name,self.age))
class Student(People):
grade = ""
def __init__(self,n,a,g):
People.__init__(self,n,a)
self.grade = g
def speak(self):
print("%s say: I am %d years old, and I am in %d grade"%(self.name, self.age, self.grade))
p = People('shenzhen', 38)
p.speak()
s = Student('xiaoming', 10, 3)
s.speak()
在例子中Peple類為基類,Student類為繼承Peple的子類,在Student類中的建構函式中呼叫了父類的建構函式,並且子類重寫了父類的方法speak。
示例執行結果如下:
多重繼承
一個類可以繼承多個類,這叫多重繼承,多重繼承的語法如下:
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>
多重繼承示例程式碼:
class People:
name = ''
age = 0
def __init__(self, n, a):
self.name = n
self.age = a
def speak(self):
print("%s say: I am %d years old." %(self.name,self.age))
class Student(People):
grade = ""
def __init__(self,n,a,g):
People.__init__(self,n,a)
self.grade = g
def speak(self):
print("%s say: I am %d years old, and I am in %d grade"%(self.name, self.age, self.grade))
class Speaker():
topic = ""
name = ""
def __init__(self, n, t):
self.name = n
self.topic = t
def speak(self):
print("I am %s, I am a speaker, my topic is %s"%(self.name,self.topic))
class Sample(Speaker, Student):
a =''
def __init__(self,n,a,g,t):
Student.__init__(self,n,a,g)
Speaker.__init__(self,n,t)
p = People('shenzhen', 38)
p.speak()
s = Student('xiaoming', 10, 3)
s.speak()
sp = Speaker('Jack', 'Python Programming')
sp.speak()
test = Sample("Tim",25,4,"Python3 Programming")
test.speak()
在上例中,Sample類繼承了Student和Speaker類,然後呼叫了父類的speak方法,因為兩個父類都有這個方法,預設呼叫的是在括號中自左到右排在前面的父類的方法。
示例執行結果如下:
如果你喜歡這篇文章,別忘了點贊和評論哦!