|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 fengye4242 于 2018-1-25 21:41 编辑
- class CapStr(str):
- def __new__(cls,string):
- string=string.upper()
- print(string)
- return str.__new__(cls,string)
复制代码
此时输入代码以及结果:
当我联用init与new函数,代码如下- class CapStr(str):
- def __new__(cls,string):
- string=string.upper()
- return str.__new__(cls,string)
- def __init__(self,string):
- print(string)
复制代码
运行结果为:
运行环境为spyder(python3.6)
我认为init的函数调用是在new之后,所以传递给init的对象是new函数返回的
但我不能理解第二段代码中的小写是怎么出现的,求各位大佬解释
class CapStr(str):
def __new__(cls,string):
string=string.upper()
print( '__new__() - {cls}'.format(cls=cls) )
return str.__new__(cls,string)
def __init__(self,string):
print(string)
c=CapStr('asd')
结果是:
__new__() - <class '__main__.CapStr'>
asd
此处的方法__init__() 和__new()__是特殊的方法,每当你根据 类创建新实例时,Python都会自动运行它,所以会打印出来你的小写的结果。
发现实例化对象的时候,调用__init__()初始化之前,先调用了__new__()方法
__new__()必须要有返回值,返回实例化出来的实例,需要注意的是,可以return父类__new__()出来的实例,也可以直接将object的__new__()出来的实例返回。
__init__()有一个参数self,该self参数就是__new__()返回的实例,__init__()在__new__()的基础上可以完成一些其它初始化的动作,__init__()不需要返回值。
|
|