Python 魔法函数 __call__

# ###___call__魔法函数
'''
触发时机:把对象当作函数调用的时候自动触发
功能:模拟函数化操作
参数:参数不固定,至少一个self参数
返回值:看需求
'''

#(1).基本语法
import math

class MyClass():
    def __call__(self):
        print('call方法被触发')

obj=MyClass()
obj()

#(2)洗衣服的过程
class Wash():
    def __call__(self):
        self.step1()
        self.step2()

    def step1(self):
        print('把衣服扔进洗衣机')

    def step2(self):
        print('启动开关')

obj=Wash()
'''
方法一:
obj.step1()
obj.step2()

'''
'''
方法二:
obj()
'''

#####根据int方法自定义类
'''bool int float'''
class MyInt():
    def myfunc(self,num,sign=1):
        print(num)
        print(sign)
        res=num.lstrip('0')
        if res=='':
            return 0
        return eval(res)*sign

    def __call__(self,n):
        #判断是不是bool
        if isinstance(n,bool):
            if n==True:
                return 1
            else:
                return 0
            #判断是不是int
        elif isinstance(n,int):
            return n
        #判断是不是float
        elif isinstance(n,float):
            if n>0:
                return math.floor(n)
            else:
                return math.ceil(n)

        #判断是不是字符串
        elif isinstance(n,str):
            sign=1
            #判断是否带符号
            if (n[0]=="+" or n[0]=="-") and n[1:].isdecimal():
                if n[0]=="+":
                    sign=1
                elif n[0]=="-":
                    sign=-1
            return self.myfunc(n[1:],sign)

myint=MyInt()
res=myint(True)
res=myint(-19.99)
res=myint('-00000010000')
print(res)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值