Victor0321 发表于 2022-4-16 14:15:24

python中类的使用

Person().name = '小王八'    ???为什么这个地方没有改变类里面的属性

class Person:
    name = '小乌龟'
    def printname(self):
      print(self.name)
Person().name = '小王八'    ???为什么这个地方没有改变类里面的属性
Person().printname()→→→→→→→→→ 小乌龟

a = Person()
a.name = '小王八'
a.printname()   →→→→→→→→→    小王八

hrpzcf 发表于 2022-4-16 14:25:46

因为
Person().name = '小王八'    ???为什么这个地方没有改变类里面的属性
Person().printname()→→→→→→→→→ 小乌龟
实例化了两次,每次都是不同的实例。

Victor0321 发表于 2022-4-16 14:31:33

hrpzcf 发表于 2022-4-16 14:25
因为
Person().name = '小王八'    ???为什么这个地方没有改变类里面的属性
Person().printname()→ ...

理解的不是很明白 。。。。 我的理解应该这俩的区别就在于一个引进了个中间变量啊。。。

python爱好者. 发表于 2022-4-16 14:39:27

Victor0321 发表于 2022-4-16 14:31
理解的不是很明白 。。。。 我的理解应该这俩的区别就在于一个引进了个中间变量啊。。。

除非你将这段代码放在定义了类之后:
Person.name = "小王八"
因为你前面是加了括号赋值的,所以是给新增的实例对象中的这个变量赋值,
要给他们的类之间进行改变,应在它是类,或类对象时才能定义(小甲鱼后面会讲的)!

hrpzcf 发表于 2022-4-16 14:48:03

本帖最后由 hrpzcf 于 2022-4-16 14:51 编辑

Victor0321 发表于 2022-4-16 14:31
理解的不是很明白 。。。。 我的理解应该这俩的区别就在于一个引进了个中间变量啊。。。

Person().name = '小王八'    ???为什么这个地方没有改变类里面的属性
------》Person()是一个新实例,Person().name = '小王八' 只是改变了这个实例的name,类属性Person.name并没有被改变。如果想要改变类属性,需要Person.name = '小王八' ,不能加括号。

Person().printname()→→→→→→→→→ 小乌龟
------》Person()又重新实例化了一个新实例,跟上面那个实例不是同一个了,这个实例self.name的值是类属性Person.name的副本,也就是"小乌龟",所以printname方法中print(self.name)还是"小乌龟"
页: [1]
查看完整版本: python中类的使用