【目錄】
一、系結方法與非系結方法
二、非系結方法
一、系結方法與非系結方法
? 類中定義的函式分為兩大類:系結方法和非系結方法
? 其中系結方法又分為系結到物件的物件方法和系結到類的類方法,
? 在類中正常定義的函式默認是系結到物件的,而為某個函式加上裝飾器@classmethod后,該函式就系結到類了,
類方法通常用來在__init__的基礎上提供額外的初始化實體的方式:
# 組態檔settings.py的內容 HOST='127.0.0.1' PORT=3306 # 類方法的應用 import settings class MySQL: def __init__(self,host,port): self.host=host self.port=port @classmethod def from_conf(cls): # 從組態檔中讀取配置進行初始化 return cls(settings.HOST,settings.PORT) >>> MySQL.from_conf # 系結到類的方法 <bound method MySQL.from_conf of <class ‘__main__.MySQL'>> >>> conn=MySQL.from_conf() # 呼叫類方法,自動將類MySQL當作第一個引數傳給cls
系結到類的方法就是專門給類用的,但其實物件也可以呼叫,只不過自動傳入的第一個引數仍然是類,
也就是說這種呼叫是沒有意義的,并且容易引起混淆,這也是python的物件系統與其他面向物件語言物件系統的區別之一,
比如smalltalk和ruby中,系結到類的方法與系結到物件的方法是嚴格區分開的,
二、非系結方法
為類中某個函式加上裝飾器@staticmethod后,該函式就變成了非系結方法,也稱為靜態方法,
該方法不與類或物件系結,類與物件都可以來呼叫它,但它就是一個普通函式而已,因而沒有自動傳值那么一說,
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) #100365f6-8ae0-11e7-a51e-0088653ea1ec # 類或物件來呼叫create_id發現都是普通函式,而非系結到誰的方法 >>> MySQL.create_id <function MySQL.create_id at 0x1025c16a8> >>> conn.create_id <function MySQL.create_id at 0x1025c16a8>
三、總結系結方法與非系結方法的使用

若類中需要一個功能,
該功能的實作代碼中需要參考物件則將其定義成物件方法、
需要參考類則將其定義成類方法、
無需參考類或物件則將其定義成靜態方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/159115.html
標籤:Python
