kno 发表于 2020-12-6 18:41:36

python类问题

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')
为什么上面的运行错误而下面运行正确

suchocolate 发表于 2020-12-6 19:22:29

第一种是类属性,删除得这样:delattr(Coordinate,'x')

梦回连营 发表于 2020-12-6 19:35:30

因为第二种用了那个init魔法方法,每当你生成一个对象的时候会自动运行init下的代码,所以可以直接删除实列的属性
而第一种在你生成一个实例的时候并不会运行下面的代码,只有你去运行a.x才会返回x的值,但是并没有给a这个属性,只有一个叫a.x的值

kno 发表于 2020-12-6 20:29:14

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

说白了上面的变量不是类的属性,是吗。

梦回连营 发表于 2020-12-6 20:36:46

kno 发表于 2020-12-6 20:29
说白了上面的变量不是类的属性,是吗。

是类的属性,但并不是对象的属性
也就是Coordinate有这个属性,你可以delattr(Coordinate,'x')删除这个属性
但不是a的属性,所以没办法delattr(a,'x')删除
页: [1]
查看完整版本: python类问题