類的特殊方法 call

2022-07-17 09:36:12 字數 1360 閱讀 4801

1. __call__

當執行物件名+括號時, 會自動執行類中的"__call__"方法, 怎麼用?

class a:

def __init__(self, name):

self.name = name

def __call__(self, *args, **kwargs):

print(123)

obj = a('wangjianwei')

obj() # 當執行 object() 時,會自動執行類中的"__call__"方法

# 結果: 123

例項(物件)分為可呼叫和不可呼叫, 怎麼區分呢?

單純的類, 單純的物件

class a:

def __init__(self, name):

self.name = name

# def __call__(self, *args, **kwargs):

# print(123)

obj = a('wangjianwei')

# obj()

print(callable(obj)) # 判斷給物件是都可被執行

# 結果: false

擁有__call__方法的類

class a:

def __init__(self, name):

self.name = name

def __call__(self, *args, **kwargs):

print(123)

obj = a('wangjianwei')

obj()

print(callable(obj)) # 判斷給物件是都可被執行

# 結果: true

所以, 當乙個類中有"__call__"方法是, 那麼這個類產生的物件就是乙個可呼叫物件

例項一

class cal:

def __call__(self, a, b):

return a * b

obj = cal()

print(obj(10,20)) #直接使用物件呼叫__call__, 並執行裡面的**塊

# 結果:200

例項二

class a:

def __call__(self, *args, **kwargs):

print(args)

# 結果: ('123',)

class b:

def __init__(self):

self.obj = a()

self.obj('123')

objb = b()

python 特殊方法之 call

call 在python中,函式其實是乙個物件 f abs f.name abs f 123 123由於 f 可以被呼叫,所以,f 被稱為可呼叫物件。所有的函式都是可呼叫物件。乙個類例項也可以變成乙個可呼叫物件,只需要實現乙個特殊方法 call 我們把 person 類變成乙個可呼叫物件 class...

特殊的類方法

hasattr self,item 點號攔截運算,注 這是乙個繫結物件方法 在乙個類中,如果類裡定義了該方法 大多數內建類是沒有的 則這個類生成的物件加點呼叫屬性或方法時,如果呼叫的名字不存在,不會報錯,會執行 hasattr 這個方法。class person object def init se...

PYTHON類的特殊方法

例項1 python view plain copy coding utf 8 class firstdemo object 這裡是乙個doc a 10 類屬性 def demo self 第乙個方法 pass def demo2 self 第二個方法 pass print firstdemo.di...