Python中的綁定方法和非綁定方法
阿新 • • 發佈:2019-02-03
約定 iges 方法 per icm 內部 ict 定義 kitty 綁定方法
類中定義的方法大致可以分為兩類:綁定方法和非綁定方法。其中綁定方法又可以分為綁定到對象的方法和綁定到類的方法~
綁定到對象的方法
在類中沒有被任何裝飾器修飾的方法就是 綁定到對象的方法,這類方法專門為對象定制。
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即為綁定到對象的方法,這個方法不在對象的名稱空間中,而是在類的名稱空間中。
通過對象調用綁定到對象的方法,會有一個自動傳值的過程,即自動將 當前對象傳遞給方法的第一個參數(self,一般都叫self,也可以寫成別的名稱),若是使用類調用,則第一個參數需要手動傳值~
p = Person(‘Kitty‘, 18)
p.speak() # 通過對象調用
Person.speak(p) # 通過類調用
綁定到類的方法
類中使用@classmethod修飾的方法就是 綁定到類的方法。這類方法專門為類定制。通過類名調用 綁定到類的方法 時,會將 類本身當做參數傳給類方法的第一個參數~
class Operate_database(): host = ‘192.168.0.5‘ port = ‘3306‘ user = ‘abc‘ password = ‘123456‘ @classmethod def connect(cls): # 約定俗成第一個參數名為cls,也可以定義為其他參數名 print(cls) print(cls.host + ‘:‘ + cls.port + ‘ ‘ + cls.user + ‘/‘ + cls.password) Operate_database.connect() # 輸出結果: <class ‘__main__.Operate_database‘> 192.168.0.5:3306 abc/123456
通過對象也可以調用,只是默認傳遞的第一個參數還是這個對象對應的類~
Operate_database().connect() # 輸出結果一致
非綁定方法
在類內部使用 @staticmethod 修飾的方法即為 非綁定方法,這類方法和普通定義的函數沒有區別,不與類或對象綁定,誰都可以調用,且沒有自動傳值的效果~
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()
p = Operate_database(‘192.168.0.5‘, ‘3306‘, ‘abc‘, ‘123456‘)
print(p.get_passwrod(p.user, p.password))
簡而言之,非綁定方法就是將普通方法放到了類的內部~
.................^_^
Python中的綁定方法和非綁定方法