关于cls和self
在类的魔法函数中,__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'
页:
[1]