python魔术方法call___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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值