zoukankan      html  css  js  c++  java
  • __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)
    

      

  • 相关阅读:
    GridView绑定模板格式化日期总结
    统计静态页点击量
    行业网seo诊断
    查看sql执行效率
    ItemCommandVSItemDataBound
    【转帖】我眼中的flash和silverlight
    修改SQLserver数据库中的a表的一列等于b表的一列
    过河卒
    最长公共子序列LCS
    情感日记:在中国地质大学的日子
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10920653.html
Copyright © 2011-2022 走看看