__call__ 魔术方法
Posted huangjiangyong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了__call__ 魔术方法相关的知识,希望对你有一定的参考价值。
# ### __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)
以上是关于__call__ 魔术方法的主要内容,如果未能解决你的问题,请参考以下文章
PHP中的11个魔术方法总结:__construct,__destruct__call等