Python繫結方法與非繫結方法詳解

NO IMAGE

本文例項為大家分享了Python繫結方法與非繫結方法,供大家參考,具體內容如下

定義:

繫結方法(繫結給誰,誰來呼叫就自動將它本身當作第一個引數傳入):

    1. 繫結到類的方法:用classmethod裝飾器裝飾的方法。

                為類量身定製

                類.boud_method(),自動將類當作第一個引數傳入

              (其實物件也可呼叫,但仍將類當作第一個引數傳入)

    2. 繫結到物件的方法:沒有被任何裝飾器裝飾的方法。

               為物件量身定製

               物件.boud_method(),自動將物件當作第一個引數傳入

             (屬於類的函式,類可以呼叫,但是必須按照函式的規則來,沒有自動傳值那麼一說)

非繫結方法:用staticmethod裝飾器裝飾的方法

         不與類或物件繫結,類和物件都可以呼叫,但是沒有自動傳值那麼一說。就是一個普通工具而已

    注意:與繫結到物件方法區分開,在類中直接定義的函式,沒有被任何裝飾器裝飾的,都是繫結到物件的方法,可不是普通函式,物件呼叫該方法會自動傳值,而staticmethod裝飾的方法,不管誰來呼叫,都沒有自動傳值一說

二、繫結方法

繫結給物件的方法(略)

繫結給類的方法(classmethod)

  classmehtod是給類用的,即繫結到類,類在使用時會將類本身當做引數傳給類方法的第一個引數(即便是物件來呼叫也會將類當作第一個引數傳入),python為我們內建了函式classmethod來把類中的函式定義成類方法


import settings
class MySQL:
 def __init__(self,host,port):
  self.host=host
  self.port=port

 @classmethod
 def from_conf(cls):
  print(cls)
  return cls(settings.HOST,settings.PORT)

print(MySQL.from_conf) #<bound method MySQL.from_conf of <class '__main__.MySQL'>>
conn=MySQL.from_conf()

conn.from_conf() #物件也可以呼叫,但是預設傳的第一個引數仍然是類

三、非繫結方法

在類內部用staticmethod裝飾的函式即非繫結方法,就是普通函式

statimethod不與類或物件繫結,誰都可以呼叫,沒有自動傳值效果


import hashlib
import time
class MySQL:
 def __init__(self,host,port):
  self.id=self.create_id()
  self.host=host
  self.port=port
 @staticmethod
 def create_id(): #就是一個普通工具
  m=hashlib.md5(str(time.time()).encode('utf-8'))
  return m.hexdigest()


print(MySQL.create_id) #<function MySQL.create_id at 0x0000000001E6B9D8> #檢視結果為普通函式
conn=MySQL('127.0.0.1',3306)
print(conn.create_id) #<function MySQL.create_id at 0x00000000026FB9D8> #檢視結果為普通函式