wangye666 发表于 2022-12-26 16:26:59

类和对象问题

1、class C:
        x = []
        def add_x(self, x):
                self.x.append(x)
2、class C:
        def __init__(self):
                self.x = []
        def add_x(self, x):
                self.x.append(x)
a = C()
b = C()
a.add_x(520)
b.add_x(250)
第一个问题:为什么第一种情况下会修改C的属性,不是修改的是对象a和b属性吗?
第二个问题:为什么第一种情况下对象a和b不应该是相互无关的吗,为什么它们的属性会一起修改?
第三个问题:为什么第二种情况下反而可以单独修改对象属性,而不修改类的属性和方法?

lxping 发表于 2022-12-26 17:46:24

首先你要理解什么是类属性,什么时候对象属性:
类属性不属于任何一个对象特有,他是类以及他的所有对象共有的一个属性
对象属性必须和对象自身绑定,就是在定义类的时候用self形参代替
第一个问题:你定义的是类的属性,只是你用对象c和d对该属性进行访问而已
第二个问题:这里访问的是类属性,并不是对象属性
第三个问题:对象属性是用self形参和自身绑定的,类C并没有这个属性

wangye666 发表于 2022-12-27 08:22:53

lxping 发表于 2022-12-26 17:46
首先你要理解什么是类属性,什么时候对象属性:
类属性不属于任何一个对象特有,他是类以及他的所有对象共 ...

1、class C:
      x = []
      def add_x(self, x):
                self.x.append(x)
2、class C:
      x=520
      def add_x(self,y):
                self.x=y
c=C()
c.add_x(250)
为什么第一个定义的就是类属性,第二个定义的就是对象属性呢?如何从class类定义的哪个语句可以区分数定义的类的属性还是对象的属性呢?

wangye666 发表于 2022-12-27 08:25:01

lxping 发表于 2022-12-26 17:46
首先你要理解什么是类属性,什么时候对象属性:
类属性不属于任何一个对象特有,他是类以及他的所有对象共 ...

为什么帖子上在第一种情况下加了一个__init__函数之后就能从定义类属性变成了定义对象属性呢?

lxping 发表于 2022-12-27 09:43:37

wangye666 发表于 2022-12-27 08:25
为什么帖子上在第一种情况下加了一个__init__函数之后就能从定义类属性变成了定义对象属性呢?

新版61讲和62讲的视频好好琢磨理解一下
页: [1]
查看完整版本: 类和对象问题