鱼C论坛

 找回密码
 立即注册
查看: 1975|回复: 4

[已解决]python类问题

[复制链接]
发表于 2020-12-6 18:41:36 From FishC Mobile | 显示全部楼层 |阅读模式

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

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

x
class Coordinate:
    x = 10
    y = -5
    z = 0
a=Coordinate()
delattr(a,'x')


class b():
        def __init__(self,item):
                self.x=item
a=b(4)
delattr(a,'x')
为什么上面的运行错误而下面运行正确
最佳答案
2020-12-6 19:35:30
因为第二种用了那个init魔法方法,每当你生成一个对象的时候会自动运行init下的代码,所以可以直接删除实列的属性
而第一种在你生成一个实例的时候并不会运行下面的代码,只有你去运行a.x才会返回x的值,但是并没有给a这个属性,只有一个叫a.x的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-6 19:22:29 | 显示全部楼层
第一种是类属性,删除得这样:
delattr(Coordinate,'x')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 19:35:30 | 显示全部楼层    本楼为最佳答案   
因为第二种用了那个init魔法方法,每当你生成一个对象的时候会自动运行init下的代码,所以可以直接删除实列的属性
而第一种在你生成一个实例的时候并不会运行下面的代码,只有你去运行a.x才会返回x的值,但是并没有给a这个属性,只有一个叫a.x的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-6 20:29:14 From FishC Mobile | 显示全部楼层
梦回连营 发表于 2020-12-6 19:35
因为第二种用了那个init魔法方法,每当你生成一个对象的时候会自动运行init下的代码,所以可以直接删除实列 ...

说白了上面的变量不是类的属性,是吗。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-6 20:36:46 | 显示全部楼层
kno 发表于 2020-12-6 20:29
说白了上面的变量不是类的属性,是吗。

是类的属性,但并不是对象的属性
也就是Coordinate有这个属性,你可以delattr(Coordinate,'x')删除这个属性
但不是a的属性,所以没办法delattr(a,'x')删除
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 05:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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