重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要讲解了“python的call、len、str、repr怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python的call、len、str、repr怎么使用”吧!
创新互联2013年至今,先为营山等服务建站,营山等地企业,进行企业商务咨询服务。为营山企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
说明:
让一个类的实例变成可执行的。
案例:
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__方法。
案例:
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__方法。
说明:
可以自定义打印实例时字符串的内容。
案例:
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怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!