| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
类变量和对象变量的问题 
在对象变量没有赋值的时候地址指向的是类变量 
对象变量赋值之后才才是真正的对象变量 
那为什么对象变量二次重新赋值后地址还是变化了 
 
- class Test:
 
 -     name="Test"  #这个到底是类变量还是对象变量
 
 -     def printTest():
 
 -         print("类静态函数,类名.函数名调用,对象不能调用")
 
  
 
 
- a=Test()
 
 - b=Test()
 
 - print("对象变量没有赋值前:")
 
 - print("a.name->id=\t",id(a.name),"a.name=",a.name)
 
 - print("b.name->id=\t",id(b.name),"b.name=",b.name)
 
 - print("Test.name->id=\t",id(Test.name),"Test.name=",Test.name)
 
 - a.name="a1"
 
 - Test.name="Test2"
 
 - print("对象a,Test.name 赋值后:")
 
 - print("a.name->id=\t",id(a.name),"a.name=",a.name)
 
 - print("b.name->id=\t",id(b.name),"b.name=",b.name)
 
 - print("Test.name->id=\t",id(Test.name),"Test.name=",Test.name)
 
 - a.name="a2"
 
 - b.name="b1"
 
 - Test.name="Test3"
 
 - print("对象a,对象b,Test.name 赋值后:")
 
 - print("a.name->id=\t",id(a.name),"a.name=",a.name)
 
 - print("b.name->id=\t",id(b.name),"b.name=",b.name)
 
 - print("Test.name->id=\t",id(Test.name),"Test.name=",Test.name)
 
  复制代码 
 
运行结果 
对象变量没有赋值前: 
a.name->id=         1886594481840 a.name= Test 
b.name->id=         1886594481840 b.name= Test 
Test.name->id=         1886594481840 Test.name= Test 
对象a,Test.name 赋值后: 
a.name->id=         1886594597168 a.name= a1 
b.name->id=         1886594597232 b.name= Test2 
Test.name->id=         1886594597232 Test.name= Test2 
对象a,对象b,Test.name 赋值后: 
a.name->id=         1886594597296 a.name= a2 
b.name->id=         1886594597360 b.name= b1 
Test.name->id=         1886594597424 Test.name= Test3
 本帖最后由 阿奇_o 于 2022-11-4 00:41 编辑 
说的好像你是精通C++, Java, Python等众多语言的编程大佬似的。。  
个人观点:不是Python语法不严谨,只是你还不太熟悉它而已。 
 
简单回答一下:关于 类变量、对象变量 
    类变量(或叫"类属性"):就是在定义类时,最前面,没带self的那些变量名字。比如你这里的 name  就是类变量。  
    对象变量(或更多是叫"实例变量"或"实例属性"):就是那些 带有self的变量,比如 self.age  
    值得注意的是:实例对象也可以使用 类变量。即 没定义self.name,但有类变量name,实例obj也可以obj.name
 
至于什么内存,什么对象地址的东东,实际中都不用你管。只要区别开:什么操作是 就地改变(操作原对象),什么操作是 返回新的对象 即可。
  
 
 
 |   
 
 
 
 |