您好,登錄后才能下訂單哦!
類中定義的方法大致可以分為兩類:綁定方法和非綁定方法。其中綁定方法又可以分為綁定到對(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)部~
.................^_^
免責(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)容。