亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

類(lèi)

1、定義類(lèi)

類(lèi)定義語(yǔ)法格式如下:

class ClassName:
    <statement-1>
    .
    .
    .
    <statement-N>

一個(gè)類(lèi)也是由屬性和方法組成的,有些時(shí)候我們定義類(lèi)的時(shí)候需要設(shè)置類(lèi)的屬性,因此這就需要構(gòu)造函

類(lèi)的構(gòu)造函數(shù)如下:

def __init__(self,[...):

類(lèi)定義了 init() 方法的話,類(lèi)的實(shí)例化操作會(huì)自動(dòng)調(diào)用 init() 方法。

那么如構(gòu)造函數(shù)相對(duì)應(yīng)的是析構(gòu)函數(shù),理所當(dāng)然,一個(gè)類(lèi)創(chuàng)建的時(shí)候我們可以用過(guò)構(gòu)造函數(shù)設(shè)置屬性,那么當(dāng)一個(gè)類(lèi)銷(xiāo)毀的時(shí)候,就會(huì)調(diào)用析構(gòu)函數(shù)。

析構(gòu)函數(shù)語(yǔ)法如下:

def __del__(self,[...):

仔細(xì)觀察的童鞋都會(huì)發(fā)現(xiàn),類(lèi)的方法與普通的函數(shù)有一個(gè)特別的區(qū)別,它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱(chēng), 按照慣例它的名稱(chēng)是 self。

那么這個(gè) self 代表什么呢?

我們可以看下實(shí)例,通過(guò)實(shí)例來(lái)找出答案:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
class Test:
    def prt(self):
        print(self)
        print(self.__class__)
t = Test()
t.prt()

觀察輸出的結(jié)果:

776927ef1b515b00d2ff42650fd27f4.png從執(zhí)行結(jié)果可以很明顯的看出,self 代表的是類(lèi)的實(shí)例,輸出的是當(dāng)前對(duì)象的地址,而 self.__class__ 則指向類(lèi)。

當(dāng)然 self 不是 python 關(guān)鍵字,也就是說(shuō)我們把他換成其他的字符也是可以正常執(zhí)行的。只不過(guò)我們習(xí)慣使用 self

2、Python 定義類(lèi)的歷史遺留問(wèn)題

Python 在版本的迭代中,有一個(gè)關(guān)于類(lèi)的歷史遺留問(wèn)題,就是新式類(lèi)和舊式類(lèi)的問(wèn)題,具體先看以下的代碼:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 舊式類(lèi)
class OldClass:
    pass
# 新式類(lèi)
class NewClass(object):
    pass

可以看到,這里使用了兩者中不同的方式定義類(lèi),可以看到最大的不同就是,新式類(lèi)繼承了object 類(lèi),在 Python2 中,我們定義類(lèi)的時(shí)候最好定義新式類(lèi),當(dāng)然在 Python3 中不存在這個(gè)問(wèn)題了,因?yàn)?Python3 中所有類(lèi)都是新式類(lèi)。

那么新式類(lèi)和舊式類(lèi)有什么區(qū)別呢?

運(yùn)行下下面的那段代碼:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 舊式類(lèi)
class OldClass:
    def __init__(self, account, name):
        self.account = account;
        self.name = name;
# 新式類(lèi)
class NewClass(object):
    def __init__(self, account, name):
        self.account = account;
        self.name = name;
if __name__ == '__main__':
    old_class = OldClass(111111, 'OldClass')
    print(old_class)
    print(type(old_class))
    print(dir(old_class))
    print('\n')
    new_class=NewClass(222222,'NewClass')
    print(new_class)
    print(type(new_class))
    print(dir(new_class))

仔細(xì)觀察輸出的結(jié)果,對(duì)比一下,就能觀察出來(lái),注意喔,Pyhton3 中輸出的結(jié)果是一模一樣的,因?yàn)镻ython3 中沒(méi)有新式類(lèi)舊式類(lèi)的問(wèn)題。

繼續(xù)學(xué)習(xí)
||
提交重置代碼