|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在类的魔法函数中,__new__(cls)中的cls到底有什么用,他是代表“Capstr”这个类么? self不应该是代表c这个实例么,怎么打印出AAA了。
>>> class Capstr(str):
def __new__(cls,string):
print(cls)
print(id(cls))
string = string.upper()
return str.__new__(cls,string)
def __init__(self,string):
print(self)
>>> c = Capstr('aaa')
<class '__main__.Capstr'>
2705518804976
AAA
cls和self都是方法的形参,在类的方法中一般情况下cls指代类,self指代类实例,即有cls的方法用类名称调用,有self的方法用类实例调用。这里的方法__new__就是用类名称调用的,就像你下面写的 c=Capstr('aaa')
self指代的是类实例,但不是类实例名称。c为该类实例变量名称。就像是定义一个 int 类型变量num=4,我们只能说这个整型数是4,名称是a,不能说这个整型数是a。况且在这里进行初始化的时候还没有把该实例赋值给c 。
__new__是创建一个该类的实例对象,__init__只是初始化一个该类的实例对象。
c=Capstr('aaa') 是先执行__new__ 创建一个该类的实例对象 'AAA' ,然后再执行__init__ 进行初始化。self指代的是该类的实例化对象 即,'AAA'
|
|