马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
至于什么内存,什么对象地址的东东,实际中都不用你管。只要区别开:什么操作是 就地改变(操作原对象),什么操作是 返回新的对象 即可。
|