我们知道字符串str、整数int、浮点数float是Python的三种基本数据类型。我们也知道,在Python中,万物皆对象,对象一般都有方法。因此,你会看到如下写法:a='abcde'b=a.upper()print(b)其中.upper()是将字母转换为大写的方法。当我们编写自己的类时,我们通常会定义许多方法。那么,当字符串自带的方法不够用的时候,有没有办法让我们自定义一些方法呢?比如我想要一个方法叫.are_you_short(),如果字符串的长度小于5就返回True,如果字符串的长度大于等于5就返回False。虽然我可以单独定义一个类来做这个:classMyStr:def__init__(self,value):self.value=valuedefare_you_short(self):returnlen(self.value)<5运行效果如下图所示:但是问题来了就是,现在根据用MyStr类初始化的对象来看,根本不像是字符串。它只是一个普通的对象了。我们来对比一下普通字符串的行为和这个MyStr对象的行为:MyStr对象不仅不能打印内容,也不能通过加号进行拼接。看到这里,可能有同学认为我要讲魔术方法了。比如为MyStr实现.__str__()方法,就可以打印出内容;如果你实现了.__add__()方法,你可以用加号拼接。但是等等,哪里需要这么麻烦?一般有这种想法的同学都是刚学完Python的魔术方法,觉得什么都可以用魔术方法解决。但其实所有实现字符串的方法都很简单!学的东西越多,越容易忘记最简单的知识。想想是不是还有一种东西叫继承?我们修改一下MyStr的定义:classMyStr(str):defare_you_short(self):returnlen(self)<5运行效果如下图所示:无需手动实现任何魔术方法,可以直接拥有所有的能力字符串。您还可以尝试使用int、float甚至列表和字典来实现您自己的数据类型。需要注意的是,在继承Python数据类型时,除非你知道自己在做什么,否则不要手动编写__init__()方法。
