Python——方法

方法是類或者對象行爲特徵的抽象,方法其實也是函數,它的定義方式、調用方式與函數都很類似。python

1、類調用實例方法

先來看一段代碼:app

# 定義全局空間test函數
def test():
	print ('全局空間test方法')
# 定義全局空間num變量
num = 1

# 定義Test01類
class Test01:
        # 定義Test01空間內的test02函數
	def test02():
		print ('Test01空間的test02方法')
        # 定義Test01空間內的num變量
	num = 2

#調用全局函數test()
test()    # 打印 全局空間test方法

# 調用 Test01空間的函數test02()
Test01.test02()    # Test01空間的test02方法

#調用全局變量num
print (num)    # 打印 1

# 調用Test01空間的變量num
print (Test01.num)       # 打印 2

上面代碼中,能夠看出全局空間內定義的函數和在Test01類中定義的函數沒有多大區別,在調用Test01類中的函數和變量,只須要類名.變量名或者類名.函數名就能夠了,這就是類調用實例。函數

值得注意的是,使用類名.函數名訪問的是函數,使用實例.函數名訪問的是方法。ui

例:對象

A = Test01()
from types import FunctionType,MethodType
# 經過實例訪問的是方法
print (isinstance(A.test02,MethodType))    # 打印 True
# 經過類訪問的是函數
print (isinstance(Test01.test02,FunctionType))    # 打印 True

若是使用類調用實例方法,第一個參數不會自動綁定,只能手動去爲第一個參數綁定參數值。blog

例:字符串

class Tree:
	def apple_tree(self):
		print ('這是一棵樹',self)

# 直接使用類名.函數名調用,因爲第一個參數不會自動綁定,會報錯 TypeError: apple_tree() missing 1 required positional argument: 'self'
Tree.apple_tree()


T = Tree()
# 爲第一個參數綁定參數值
Tree.apple_tree(T)    # 打印 這是一棵樹 <__main__.Tree object at 0x0000000002E335F8>


# 第一個參數綁定的參數值不必定要綁定該Tree類的對象T,例如綁定字符串
Tree.apple_tree('雪梨樹')    # 打印 這是一棵樹 雪梨樹

 

2、類方法和靜態方法

使用@classmethod裝飾的方法是類方法,python會自動綁定類方法的第一個參數到類自己(參數名一般是cls),能夠經過他來傳遞類的屬性和方法,但不能傳遞實例的屬性和方法;使用@staticmethod裝飾的方法是靜態方法,靜態方法不會自動綁定第一個參數到類自己,且靜態方法沒有‘self’和‘cls’參數,方法中不能使用類或實體的任何屬性和方法。it

類方法,例:io

class a:
	a1 = 0
	def c():
		print ('a類的c方法')
	@classmethod
	def b(cls):
		cls.c()
		print (cls.a1)
# 經過類調用,自動綁定類方法的第一個參數,不須要手動去綁定
a.b()  
'''  
打印
a類的c方法
0
'''

# 經過實例對象調用
A = a()
A.b()
'''
打印
a類的c方法
0
'''    

 

靜態方法,例:class

class a:
	@staticmethod
	def b():
		print ('b()是靜態方法')

# 經過類調用
a.b()    # 打印 b()是靜態方法

# 經過實例對象調用
A = a()
A.b()    # 打印 b()是靜態方法
相關文章
相關標籤/搜索