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

類別

1、定義類別

類別定義語(yǔ)法格式如下:

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

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

類別的建構(gòu)子如下:

def __init__(self,[...):

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

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

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

def __del__(self,[...):

仔細(xì)觀察的童鞋都會(huì)發(fā)現(xiàn),類別的方法與普通的函數(shù)有一個(gè)特別的區(qū)別,它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱, 按照慣例它的名稱是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 代表的是類別的實(shí)例,輸出的是目前物件的位址,而self.__class__ 則指向類別。

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

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

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

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

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

那麼新式類別和舊式類別有什麼差別呢?

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

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 舊式類
class OldClass:
    def __init__(self, account, name):
        self.account = account;
        self.name = name;
# 新式類
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é)果,比較一下,就能觀察出來(lái),注意喔,Pyhton3 中輸出的結(jié)果是一模一樣的,因?yàn)镻ython3 中沒(méi)有新式類舊式類別的問(wèn)題。

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