鱼C论坛

 找回密码
 立即注册
查看: 2049|回复: 1

[已解决]关于cls和self

[复制链接]
发表于 2020-12-11 12:12:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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
最佳答案
2020-12-11 12:48:18
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'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-11 12:48:18 | 显示全部楼层    本楼为最佳答案   
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'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 02:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表