python魔術方法call call

2021-10-11 15:03:41 字數 2540 閱讀 3566

# ### __call__ 魔術方法

觸發時機:把物件當作函式呼叫的時候自動觸發

功能: 模擬函式化操作

引數: 引數不固定,至少乙個self引數

返回值: 看需求

# (1)基本語法

class myclass():

def __call__(self):

print("__call__方法被呼叫")

return "done"

obj = myclass()

res = obj()

print(res)

# (2) 模擬洗衣服的過程

class wash():

# 使用call方法,進行統一的呼叫

def __call__(self,something):

self.something = something

print("以下是洗{}的過程:".format(something))

self.step1()

self.step2()

self.step3()

def step1(self):

print("第一步放水,把{}扔盆裡".format(self.something))

def step2(self):

print("第二部匯入洗衣液,金紡,藍月亮,吊牌洗衣皂扔盆裡搓")

def step3(self):

print("第三部曬一下,穿上")

obj = wash()

# 一邊寫一邊罵街

# obj.step1()

# obj.step2()

# obj.step3()

# 小王是個快樂的孩子

obj("褲衩")

# (3) 模擬內建int方法實現myint

# print(int(-5.9))

import math

class myint():

def stoi(self,n,sign=1):

res = n.lstrip("0")

if res == "":

return 0

num = eval(res) * sign

return num

def __call__(self,n):

# 判斷的是布林型別

if isinstance(n,bool):

if n == true:

return 1

else:

return 0

# 判斷的是整型

elif isinstance(n,int):

return n

# 判斷的是浮點型

elif isinstance(n,float):

if n < 0:

return math.ceil(n)

else:

return math.floor(n)

# 判斷的是字串

elif isinstance(n,str):

if (n[0] == "-" or n[0] == "+") and n[1:].isdecimal():

if n[0] == "+":

sign = 1

elif n[0] == "-":

sign = -1

return self.stoi(n[1:],sign)

elif n.isdecimal():

# 如果能夠走到這個條件,一定沒有帶任何正負號

return self.stoi(n)

else:

return "對不起,老弟,這個算不了"

else:

print("對不起,老哥,這個算不了")

myint = myint()

res =myint(false)

print(res)

res = myint(5)

print(res)

res = myint(-5.5)

print(res)

# res = eval("123454")

# print(res,type(res))

# res = myint("12345")

# print(res,type(res))

# res = int("-00000000000111222abcdfrf")

# print(res)

# res = myint("+00000000000111222")

res = myint("*&^%$#@00000000000000000")

print(res)

# res = int("*&^%$#@00000000000000000")

# res = eval("")

# print(res)

res = int(5+6)

print(res)

res = myint(5*6)

print(res)

# res = myint([1,3,4])

res = int([1,3,4])

print(res)

python 魔術方法

魔術方法 呼叫方式 解釋 new cls instance myclass arg1,arg2 new 在建立例項的時候被呼叫 init self instance myclass arg1,arg2 init 在建立例項的時候被呼叫 cmp self,other self other,self o...

Python魔術方法

參考文章 python 魔術方法指南 魔術方法,顧名思義是一種可以給物件 類 增加魔法的特殊方法,它們的表示方法一般是用雙下劃線包圍 如 init from os.path import join class fileobject 給檔案物件進行包裝從而確認在刪除時檔案流關閉 def init se...

Python 魔術方法

usr bin env python coding utf 8 author ray time 2018 12 6 魔術方法例項 init 建構函式,在生成物件時呼叫,用來初始化值 del 析構函式,釋放物件時使用 比如編輯檔案,把關閉檔案的操作寫在此方法中,程式結束時就會關閉軟體 str 使用pr...