鱼C论坛

 找回密码
 立即注册
查看: 1151|回复: 7

为什么会是死循环?

[复制链接]
发表于 2018-1-24 16:12:15 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 2OLEGEND 于 2018-1-24 16:20 编辑
class C:
    def __getattribute__(self, name):
            print('getattribute')
        #使用super()调用object基类的__getattribute__()方法
            return super().__getattribute__(name)
    def __getattr__(self, name):
            print('getattr')
    def __setattr__(self, name, value):
            print('setattr')
            super().__setattr__(name, value)
    def __delattr__(self, name):
            print('delattr')
            super().__delattr__(name)

        
c = C()
c.x

请问各位老师,代码是照着小甲鱼老师的视频和书敲上去的,为什么会是死循环?
3.6.4版本,spyder。

谢谢各位老师!

这是运行代码之后的显示:
getattribute
getattr
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute
getattribute

但是我将代码,用IDLE打开之后,就可以运行,是正常的,这是为什么呢?

这个spyder和IDLE的区别在哪?之前的一个帖子也是我问的关于计时器的问题,也是在IDLE中可以运行没有问题,在Spyder中就不行,这是啥原因了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-24 16:18:32 | 显示全部楼层
你确定是源代码?我输入执行只有前两句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 16:21:01 | 显示全部楼层
塔利班 发表于 2018-1-24 16:18
你确定是源代码?我输入执行只有前两句

我在IDLE中执行代码也是只有两句,但在spyder中就是上述的问题,这是为啥?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 16:25:49 | 显示全部楼层
没有啊,我复制你的代码,运行正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 16:29:06 | 显示全部楼层
ipython的锅吧
跟cpython还是有区别不一样的地方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 16:29:41 | 显示全部楼层
>>> class C:
    def __getattribute__(self, name):
            print('getattribute')
        #使用super()调用object基类的__getattribute__()方法
            return super().__getattribute__(name)
    def __getattr__(self, name):
            print('getattr')
    def __setattr__(self, name, value):
            print('setattr')
            super().__setattr__(name, value)
    def __delattr__(self, name):
            print('delattr')
            super().__delattr__(name)


        
>>> c = C()
>>> c.x
getattribute
getattr
>>>

测试正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 16:36:03 | 显示全部楼层
BngThea 发表于 2018-1-24 16:25
没有啊,我复制你的代码,运行正常

感谢您的回答,我在IDLE中运行时也正常,为什么在spyder中就不行了?我主要是问这个!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 16:38:25 | 显示全部楼层
raimond 发表于 2018-1-24 16:29
>>> class C:
    def __getattribute__(self, name):
            print('getattribute')

感谢您的回答,我在IDLE中运行时也正常,为什么在spyder中就不行了?我主要是问这个!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 08:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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