鱼C论坛

 找回密码
 立即注册
查看: 2650|回复: 8

这个实时检测类有多少对象的程序有点小迷茫。。。。

[复制链接]
发表于 2016-11-5 21:06:35 | 显示全部楼层 |阅读模式
5鱼币
class Counter:
        def __init__(self):
                super().__setattr__('counter', 0)
        def __setattr__(self, name, value):
                super().__setattr__('counter', self.counter + 1)
                super().__setattr__(name, value)
        def __delattr__(self, name):
                super().__setattr__('counter', self.counter - 1)
                super().__delattr__(name)

第一处是不懂在def ___setattr__(self, name, value)中就有self,而在它下面的super().__setattr__(name, value)中为啥就没有self呢?
第二次是在第二个和第三个魔法方法的重新过程中要有super().__setattr__(name, value)和super().__delattr__(name)这两个语句?表示看不太懂。 求助。。。。。。。。。。

最佳答案

查看完整内容

>>> c = Counter() #实例化 >>> c.counter #这时计数器为0 0 >>> c.a = 123 #设置一个变量 >>> c.counter #+1,这是 super().__setattr__('counter', self.counter + 1)起作用 1 >>> c.a #这是super().__setattr__(name, value)起作用,你看看去掉这行会怎样样? 123
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-5 21:06:36 | 显示全部楼层
>>> c = Counter() #实例化
>>> c.counter #这时计数器为0
0
>>> c.a = 123 #设置一个变量
>>> c.counter #+1,这是 super().__setattr__('counter', self.counter + 1)起作用
1
>>> c.a #这是super().__setattr__(name, value)起作用,你看看去掉这行会怎样样?
123
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-5 21:17:53 | 显示全部楼层
1.可以这样理解,def ___setattr__(self, name, value)是对于类的实例化,而super().__setattr__(name, value)则是对于Counter这个类的。
2.你改写了__setattr__和__delattr__,但仍要保留原来的功能,即不希望被覆盖掉,所以必须加上super
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-6 19:53:51 | 显示全部楼层
冬雪雪冬 发表于 2016-11-5 21:17
1.可以这样理解,def ___setattr__(self, name, value)是对于类的实例化,而super().__setattr__(name, val ...

对于第二个问题,我主要是不懂既然super().__setattr__('counter', self.counter + 1)中counter已经加一了,那后面super().__setattr__(name, value)这条语句是起什么作用?我好想有什么地方卡住了,还求细说。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-6 20:37:10 | 显示全部楼层
冬雪雪冬 发表于 2016-11-6 20:12
>>> c = Counter() #实例化
>>> c.counter #这时计数器为0
0

这是我把第二个魔法方法中的super().__setattr__(name, value)语句和第三个魔法方法中的super().__delattr__(name)语句删除后运行代码的结果。发现没这两个语句和有他两没啥区别。。。。
QQ截图20161106203228.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-6 20:42:01 | 显示全部楼层
你设定了值,再看看能不能显示出。
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-11-6 20:51:31 | 显示全部楼层
冬雪雪冬 发表于 2016-11-6 20:42
你设定了值,再看看能不能显示出。

十分感谢!对了,还想问问你,我发现Python学到这以后,进步很慢。怎么样做可以大幅度提高自己对Python的掌握呢?还是不着急,慢慢来嘞?(断断续续学了Python两个多月了)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-6 21:39:03 | 显示全部楼层
新手学python 发表于 2016-11-6 20:51
十分感谢!对了,还想问问你,我发现Python学到这以后,进步很慢。怎么样做可以大幅度提高自己 ...

面向对象,类的概念的确有些难,一些魔法方法掌握起来也不容易。
建议:
1.这部分的基本概念还是要学通的。
2.同时可利用前面非面向对象的内容,多多编些小程序多做练习。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-4-23 21:41:53 | 显示全部楼层
mark
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-23 17:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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