在python中,类有很多内置方法,且都有 共同特点,方法 名字前后 各有两个下划线__名字__,如之前的__init__()方法,所以在我们自定义方法时,不要起这样的方法名,避免和类的内置方法冲突
__new__()
类构造方法,用于产生实例化对象,可以控制对象的产生过程,必须返回一个对象。在单例模式时会用到(类只能实例化一个对象)
https://www.malaoshi.top/show_1EF4H2ziJXlN.html
__init__()
参见链接:
http://www.malaoshi.top/show_1EF2CN6lpDXi.html
继承行为参见链接:
http://www.malaoshi.top/show_1EF2CulE08sX.html
__str__()
该方法返回字符串,实现该方法后,当执行str(实例),print(实例)时,显示该方法返回的字符串
在没有实现该方法时,代码如下:
class Phone:
def __init__(self,name):
self.__name=name
huawei=Phone("华为")
print(huawei)
结果如下:
<__main__.Phone object at 0x00A735B0>
显示是地址信息。
修改代码,增加__str__()方法,如下:
#coding=utf-8
class Phone:
def __init__(self,name):
self.__name=name
def __str__(self):
return "name=%s"%(self.__name)
huawei=Phone("华为")
#直接打印实例
print(huawei)
#将实例转换字符串
s=str(huawei)
print(s)
结果如下:
name=华为
name=华为
显示的内容是__str__()方法返回的字符串
应用场景
在直接打印datetime对象时,显示的是时间,就是通过__str___()实现的
import datetime
now=datetime.datetime.today()
print(type(now))
print(now)
__repr__()
功能同__str__()方法,但有一些区别
- 没有定义
__str__()方法,但定义__repr__()方法了,那么当执行str(实例),print(实例)时,调用的是__repr__()方法 - 用于其他的环境中,比如交互环境执行
>>>实例敲回车时,执行的是__repr__()方法
感谢文章:
https://www.cnblogs.com/pythonkids/p/7695807.html