1. 程式人生 > >Python基本語法之面向物件

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方法,因為兩個父類都有這個方法,預設呼叫的是在括號中自左到右排在前面的父類的方法。

示例執行結果如下:

如果你喜歡這篇文章,別忘了點贊和評論哦!