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)
    

      

  • 相关阅读:
    ElasticSearch 高级DSL查询语句
    docker改国内官方镜像
    step1: python & scrapy安装
    step7: 输出到json文件
    step6: item与pipeline
    step5: 编写spider爬取
    step4: Xpath的使用
    step3: 创建jobbole爬虫
    step2: 爬取廖雪峰博客
    解决WAS更新web.xml文件不生效的问题(web_merged.xml是罪魁祸首)
  • 原文地址:https://www.cnblogs.com/huangjiangyong/p/10920653.html
Copyright © 2011-2022 走看看