温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python的call、len、str、repr怎么使用

发布时间:2021-11-25 09:15:48 来源:亿速云 阅读:167 作者:iii 栏目:互联网科技

这篇文章主要讲解了“python的call、len、str、repr怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python的call、len、str、repr怎么使用”吧!

__call__方法

说明

让一个类的实例变成可执行的。

案例

class Cat:'''猫类'''def __init__(self, name):self.name = name
        self.count = 0def eat(self):print(f'{self.name}正在进食!')def __call__(self, *args, **kwds) -> int:for i in args:self.count += 1print(f'{self.name}抓到了{i},已抓到了{self.count}只猎物')return self.count


white_cat = Cat('大白猫')white_cat('麻雀', '老鼠')out:大白猫抓到了麻雀,已抓到了1只猎物
大白猫抓到了老鼠,已抓到了2只猎物

white_cat(‘麻雀’, ‘老鼠’)效果完全等价于white_cat.__call__(‘麻雀’, ‘老鼠’)。实际上就是解释器做了个约定:实例后面()时实际就是调用该实例的__call__方法。

假如你定义的类的绑定方法只有一个(或某个方法使用频率非常高),那么可以把那个方法名写成__call__,这样后续使用时会方便很多,可以直接用实例名()来执行。

__len__方法

说明

对实例执行len()时实际就是调用它的__len__方法。

案例

class Cat:'''猫类'''def __init__(self, name):self.name = name
        self.preys = []def __len__(self):return len(self.preys)def eat(self):print(f'{self.name}正在进食!')def __call__(self, *args, **kwargs):self.preys.extend(args)for i in args:print(f'{self.name}抓到了{i}')print(f'{self.name}抓到了{len(self)}只猎物!')white_cat = Cat('大白猫')white_cat('小麻雀', '小老鼠')white_cat('大麻雀', '大老鼠')white_cat('小猫鱼', '大青鱼')out:大白猫抓到了小麻雀
大白猫抓到了小老鼠
大白猫抓到了2只猎物!
大白猫抓到了大麻雀
大白猫抓到了大老鼠
大白猫抓到了4只猎物!
大白猫抓到了小猫鱼
大白猫抓到了大青鱼
大白猫抓到了6只猎物!

在这个案例中对之前的代码做了优化,现在的大白猫还能记住它抓到的所有猎物,当你len(white_cat)就可以知道大白猫抓到了几只猎物。

对一个实例使用len()时,实际上就是在调用这个实例的__len__方法。

__str__方法和__repr__方法

说明

可以自定义打印实例时字符串的内容。

案例

class Cat:'''猫类'''def __init__(self, name):self.name = name
        self.preys = []def __len__(self):return len(self.preys)def eat(self):print(f'{self.name}正在进食!')def __call__(self, *args, **kwargs):self.preys.extend(args)for i in args:print(f'{self.name}抓到了{i}')print(f'{self.name}抓到了{len(self)}只猎物!')def __repr__(self):return f'啊,{self.name}抓住了“{",".join(self.preys)}”这些猎物。'def __str__(self):return f'哇,{self.name}抓住了“{",".join(self.preys)}”这些猎物。'white_cat = Cat('大白猫')white_cat('小麻雀', '小老鼠')white_cat('大麻雀', '大老鼠')white_cat('小猫鱼', '大青鱼')print(white_cat)out:大白猫抓到了小麻雀
大白猫抓到了小老鼠
大白猫抓到了2只猎物!
大白猫抓到了大麻雀
大白猫抓到了大老鼠
大白猫抓到了4只猎物!
大白猫抓到了小猫鱼
大白猫抓到了大青鱼
大白猫抓到了6只猎物!
哇,大白猫抓住了“小麻雀,小老鼠,大麻雀,大老鼠,小猫鱼,大青鱼”这些猎物。

打印实例时会先调用__str__方法,没有__str__方法时会调用__repr__方法,两者都没有时打印的是类似这样的:“<main.Cat object at 0x00000299EE6C45E0>”。

__str__方法和__repr__方法的区别

  • print()时会先调用__str__方法,没有__str__方法时才调用__repr__方法。

  • 在交互模式下直接输入实例回车时显示的是__repr__方法返回的内容。

str函数和repr函数的区别

当参数是字符串数据类型时它们返回的内容不完全一致,其他的数据类型返回的内容完全一致。

test1 = 123ret1 = str(test1)ret2 = repr(test1)print(ret1, ret2, ret1 == ret2)test1 = '123'ret1 = str(test1)ret2 = repr(test1)print(ret1, ret2, ret1 == ret2)out:123 123 True123 '123' False

注意:对字符串数据进行repr后得到的内容会多一对单引号,长度会加2;对字符串数据进行str后得到的内容和原来一样。

感谢各位的阅读,以上就是“python的call、len、str、repr怎么使用”的内容了,经过本文的学习后,相信大家对python的call、len、str、repr怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI