友情提示:380元/半年,儿童学编程,就上码丁实验室。
各位小伙伴大家好:
上期我们完成了一个模拟的油量报警程序,本期我们用str方法来稍稍修改一下我们的程序。
首先还是来介绍一下__str__方法,str是英文string字符串的缩写。在Python中以双下划线__开始并且以双下划线__结束的方法是实现特定功能的特殊方法。
这样的特殊方法有很多,除了像__init__和__str__之外还有诸如:__del__(析构函数) __cmp__(比较方法) __mul__(数学乘法) __sub__(数学减法)等,有兴趣的小伙伴可以自己去了解,这里就不给大家copy了。
接下来看一段示例代码:
代码只有三行,前两行定义了一个Dog类,这个类什么都没写,只是用一个pass来占位,以免程序运行时报错。
第三行直接print我们所定义的类,结果在图片左上角。打印了一段描述信息,表示这是当前程序的一个类。至于__main__我们后面再来了解。
貌似看不出什么名堂,下面我们实例化一个对象,来做个比较。
实例化一个puppy对象,同样是直接print对象名puppy。从右侧的结果可以看出,打印对象和打印类有所不同,打印对象除了会显示对象所属的类Dog,并且会在最后还输出这个对象的地址。
这个地址就是实例化对象之后,程序向系统申请的内存空间的地址,也是就是puppy所指向的内存地址。
这就是在没有定义str方法的情况下,我们print类或对象名所能得到返回信息。
下面我们在类中写上一个str方法,看看会有什么不同
在类中定义一个str方法之后,我们再来print对象名,结果所返回的信息就是我们在str方法中的返回值——字符串(小狗)。
换句话说就是,我们在str方法中return返回的是什么,将来用print打印出来就是什么。
比如我们上面在str中返回一个字符串(小狗),那么我们print(puppy)出来的就是:小狗,这就是str的最基本的作用。
另外从例子中我们可以看出,print(Dog)没有变化,我认为这是因为class的描述信息是系统写好的,我们并没有修改,所以不会改变。
下面我们用str方法来对上期的程序做一点小小的修改,来体验一下str的使用:
这里的str方法返回的是实例属性oilvalue,所以我们在print(byd)的时候就会输出实例属性的值。
最后来背靠背,比比高:
和前面的代码进行比较来看,使用str方法用print对象名的方式来输出信息,比调用实例方法要相对简洁一点,特别是在有很多实例对象的情况下。
你觉得呢?
好了,本期就为大家介绍到这里。
欢迎扫描下方二维码入群和我交流
转自公众号:
高维数学