類中定義的函數(shù)分為兩大類:綁定方法和非綁定方法
創(chuàng)新互聯(lián)公司專注于弋江企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,購物商城網(wǎng)站建設(shè)。弋江網(wǎng)站建設(shè)公司,為弋江等地區(qū)提供建站服務(wù)。全流程按需定制開發(fā),專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
其中綁定方法又分為綁定到對象的對象方法和綁定到類的類方法。
在類中正常定義的函數(shù)默認(rèn)是綁定到對象的,而為某個函數(shù)加上裝飾器@classmethod后,該函數(shù)就綁定到了類。
我們在之前的章節(jié)中已經(jīng)介紹過對象方法了,本節(jié)我們主要介紹類方法。類方法通常用來在__init__的基礎(chǔ)上提供額外的初始化實例的方式
# 配置文件settings.py的內(nèi)容
HOST='127.0.0.1'
PORT=3306
# 類方法的應(yīng)用
import settings
class MySQL:
def __init__(self,host,port):
self.host=host
self.port=port
@classmethod
def from_conf(cls): # 從配置文件中讀取配置進(jìn)行初始化
return cls(settings.HOST,settings.PORT)
>>> MySQL.from_conf # 綁定到類的方法
>
>>> conn=MySQL.from_conf() # 調(diào)用類方法,自動將類MySQL當(dāng)作第一個參數(shù)傳給cls
綁定到類的方法就是專門給類用的,但其實對象也可以調(diào)用,只不過自動傳入的第一個參數(shù)仍然是類,也就是說這種調(diào)用是沒有意義的,并且容易引起混淆,這也是Python的對象系統(tǒng)與其他面向?qū)ο笳Z言對象系統(tǒng)的區(qū)別之一,比如Smalltalk和Ruby中,綁定到類的方法與綁定到對象的方法是嚴(yán)格區(qū)分開的。
為類中某個函數(shù)加上裝飾器@staticmethod后,該函數(shù)就變成了非綁定方法,也稱為靜態(tài)方法。
該方法不與類或?qū)ο蠼壎ǎ惻c對象都可以來調(diào)用它,但它就是一個普通函數(shù)而已,因而沒有自動傳值那么一說,遵循函數(shù)玩法
import uuid
class MySQL:
def __init__(self,host,port):
self.id=self.create_id()
self.host=host
self.port=port
@staticmethod
def create_id():
return uuid.uuid1()
>>> conn=MySQL(‘127.0.0.1',3306)
>>> print(conn.id) #f6-8ae0-11e7-a51e-00ea1ec
# Python學(xué)習(xí)交流群:
# 類或?qū)ο髞碚{(diào)用create_id發(fā)現(xiàn)都是普通函數(shù),而非綁定到誰的方法
>>> MySQL.create_id
>>> conn.create_id
綁定方法與非綁定方法的使用:若類中需要一個功能,該功能的實現(xiàn)代碼中需要引用對象則將其定義成對象方法、需要引用類則將其定義成類方法、無需引用類或?qū)ο髣t將其定義成靜態(tài)方法。