1. 程式人生 > >Python基礎,面向對象

Python基礎,面向對象

基礎知識 python

幾個名詞知識:

類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。

類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作為實例變量使用。

實例變量:定義在方法中的變量,只作用於當前實例的類。

數據成員:類變量或者實例變量用於處理類及其實例對象的相關的數據。

方法:類中定義的函數。

方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override),也稱為方法的重寫。

繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模擬"是一個(is-a)"關系(例圖,Dog是一個Animal)。

實例化:創建一個類的實例,類的具體對象。

對象:通過類定義的數據結構實例。對象包括兩個數據成員(類變量和實例變量)和方法。


類定義語法格式如下

# E:\Python36
# coding=GBK
class classname:
    script……

類實例化後,可以使用其屬性,實際上,創建一個類之後,可以通過類名訪問其屬性。

類對象支持兩種操作:屬性引用和實例化。

例如:

# E:\Python36
# coding=GBK
#類定義
class people:
    #定義基本屬性
    name = ‘‘
    age = 1
    def f(self):
        return ‘hello world‘

# 實例化類
b = people()

# 訪問類的屬性和方法
print("people類的屬性age為:", b.age)
print("people類的方法f輸出為:", b.f())

執行以上程序輸出結果為:

people類的屬性age為: 1

people類的方法f輸出為: hello world


定義類的時候是可以定義為一個可以初始化的類,因此類可能會定義一個名為 __init__() 的特殊方法(就是所謂的構造方法),類的實例化操作會自動調用 __init__() 方法。

當然, __init__() 方法可以有參數,參數通過 __init__() 傳遞到類的實例化操作上。

例如:

# E:\Python36
# coding=GBK
#類定義
class people:
    #定義基本屬性
    name = ‘‘
    age = 0
    #定義構造方法,用於初始化
    def __init__(self,n,a):
        self.name = n
        self.age = a 
       
if __name__ == ‘__main__‘:
    #實例化 
    p = people(‘jack‘,25)
    p.speak()

輸出結果為:jack 12


類的方法

在類地內部,使用def關鍵字可以為類定義一個方法,與一般函數定義不同,類方法必須包含參數self,且為第一個參數:

例如:

# E:\Python36
# coding=GBK
#類定義
class people:
    #定義基本屬性
    name = ‘‘
    age = 0
    #定義構造方法,用於初始化
    def __init__(self,n,a):
        self.name = n
        self.age = a
    def speak(self):
        print("我叫%s,今年%d歲!" %(self.name,self.age))

p = people(‘jack‘,25)
p.speak()

執行代碼輸出結果:我叫jack,今年25歲了!


繼承

在這裏我應用了模塊,模塊就是一個包含所有你定義的函數和變量的文件,其後綴名是.py。模塊可以被別的程序引入,以使用該模塊中的函數等功能。

寫一個類(student)來繼承類(people),people應用模塊引入的方式,如下:

# E:\Python36
# coding=GBK

#引入模塊
from class_people import people as p
#單繼承示例,繼承people
class student(p):
    grade = ‘‘
    def __init__(self,n,a,g):
        #調用父類的構函
        p.__init__(self,n,a)
        self.grade = g
    #如果父類的方法滿足不了需求則重寫父類的方法
    def speak(self):
        print("不對現在%d歲了,我在讀%s年級"%(self.age,self.grade))

s = student(‘jack‘,26,‘大學三‘)
s.speak()

執行代碼輸出結果為:

我叫jack,今年25歲!

不對現在26歲了,我在讀大學三年級


多繼承

這裏再增加一個類


這裏有用到了一個知識點:__name__屬性

一個模塊被另一個程序第一次引入時,其主程序將運行。如果我們想在模塊被引入時,模塊中的某一程序塊不執行,我們可以用__name__屬性來使該程序塊僅在該模塊自身運行時執行。

例如:

class_people people p
speaker(p):
    topic = (,n,a,t):
        p.(,n,a)
        .topic = t
    speak():
        (%(.name,.age,.topic))

__name__ ==:
    s = speaker(,,)
    s.speak()

下面我們來寫一個多繼承的代碼:

# E:\Python36
# coding=GBK

from class_student import student as t
from  class_speaker import speaker as s
# 多繼承,繼承學生和演說家
class sample(t,s):
    a =‘‘
    def __init__(self,n,a,g,t1):
        t.__init__(self,n,a,g)
        s.__init__(self,t1)
    # 重寫父類方法
    def speak(self):
        print("暑假過後就是%s了,我還是一個演說家,我今天演講的主題是%s"%(self.grade,self.topic))

test = sample("jack",26,‘大四‘,"Python")
test.speak()   #方法名同,默認調用的是在括號中排前地父類的方法

執行代碼,運行結果為:

我叫jack,今年25歲了!

不對現在26歲了,我在讀大學三年級

暑假過後就是大四了,我還是一個演說家,我今天演講的主題是Python


有結果我們可以看出,類class_speaker中的方法並沒有運行,因此每個模塊都有一個__name__屬性,當其值是‘__main__‘時,表明該模塊自身在運行,否則是被引入。

Python基礎,面向對象