溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中的綁定方法和非綁定方法

發(fā)布時(shí)間:2020-08-03 00:10:07 來源:網(wǎng)絡(luò) 閱讀:598 作者:LJ_baby 欄目:編程語言

綁定方法

類中定義的方法大致可以分為兩類:綁定方法和非綁定方法。其中綁定方法又可以分為綁定到對(duì)象的方法和綁定到類的方法~

綁定到對(duì)象的方法

在類中沒有被任何裝飾器修飾的方法就是 綁定到對(duì)象的方法,這類方法專門為對(duì)象定制。

class Person:
    country = "China"
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def speak(self):
        print(self.name + ', ' + str(self.age))

p = Person('Kitty', 18)
print(p.__dict__)      # {'name': 'Kitty', 'age': 18}
print(Person.__dict__['speak'])  # <function Person.speak at 0x10b81cbf8>

speak即為綁定到對(duì)象的方法,這個(gè)方法不在對(duì)象的名稱空間中,而是在類的名稱空間中。
通過對(duì)象調(diào)用綁定到對(duì)象的方法,會(huì)有一個(gè)自動(dòng)傳值的過程,即自動(dòng)將 當(dāng)前對(duì)象傳遞給方法的第一個(gè)參數(shù)(self,一般都叫self,也可以寫成別的名稱),若是使用類調(diào)用,則第一個(gè)參數(shù)需要手動(dòng)傳值~

p = Person('Kitty', 18)
p.speak()     # 通過對(duì)象調(diào)用
Person.speak(p)   # 通過類調(diào)用

綁定到類的方法

類中使用@classmethod修飾的方法就是 綁定到類的方法。這類方法專門為類定制。通過類名調(diào)用 綁定到類的方法 時(shí),會(huì)將 類本身當(dāng)做參數(shù)傳給類方法的第一個(gè)參數(shù)~

class Operate_database():
    host = '192.168.0.5'
    port = '3306'
    user = 'abc'
    password = '123456'

    @classmethod
    def connect(cls):      # 約定俗成第一個(gè)參數(shù)名為cls,也可以定義為其他參數(shù)名
        print(cls)
        print(cls.host + ':' + cls.port + ' ' + cls.user + '/' + cls.password)

Operate_database.connect()

# 輸出結(jié)果:
<class '__main__.Operate_database'>
192.168.0.5:3306 abc/123456

通過對(duì)象也可以調(diào)用,只是默認(rèn)傳遞的第一個(gè)參數(shù)還是這個(gè)對(duì)象對(duì)應(yīng)的類~

Operate_database().connect()   # 輸出結(jié)果一致

非綁定方法

在類內(nèi)部使用 @staticmethod 修飾的方法即為 非綁定方法,這類方法和普通定義的函數(shù)沒有區(qū)別,不與類或?qū)ο蠼壎ǎl都可以調(diào)用,且沒有自動(dòng)傳值的效果~

import hashlib

class Operate_database():

    def __init__(self, host, port, user, password):
        self.host = host
        self.port = port
        self.user = user
        self.password = password

    @staticmethod
    def get_passwrod(salt, password):
        m = hashlib.md5(salt.encode('utf-8'))
        m.update(password.encode('utf-8'))
        return m.hexdigest()

hash_password = Operate_database.get_passwrod('lala', '123456')  # f7a1cc409ed6f51058c2b4a94a7e1956
# p = Operate_database('192.168.0.5', '3306', 'abc', '123456')
# p.get_passwrod(p.user, p.password)    # 也可以通過對(duì)象調(diào)用

簡(jiǎn)而言之,非綁定方法就是將普通方法放到了類的內(nèi)部~

.................^_^

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI