在复习基础知识时,书上的一个例子我有点迷惑,代码如下
class Foo(object):
x = 1.5
class Foo1(object):
x = {2003: 'poe2'}
a=Foo()
# a.x = 1.7
a.x = Foo.x + 0.2
print(a.x) #1.7
print(Foo.x) #1.5
foo = Foo1()
foo.x[2004] = 'valid path'
print(foo.x) #{2003: 'poe2', 2004: 'valid path'}
print(Foo1.x) #{2003: 'poe2', 2004: 'valid path'}
对此我很奇怪,为什么Foo1.x 是 {2003: ‘poe2’, 2004: ‘valid path’} 而不是{2003: ‘poe2’}
后来去找刘总沟通,也在网上找到了答案
原文地址:类变量和实例变量的概念
原文地址:不可变对象和可变对象的概念
类变量和实例变量的概念
class Person():
person = 'alive' #这是类变量
def __init__(self,name ,age):
self.name = name #这是实例变量
self.age = age #这是实例变量
self.gender = '男' #这是实例变量
#a = 456 #不能写这里,会出错
place = ['地球','中国'] #这是类变量
上面这个简单的讲述了什么是实例变量什么是类变量,这个其实是比较好理解的
在实例化时,如果直接改变类变量会影响实例变量,实例变量不会影响到类变量
下文可以看到区别
if __name__=="__main__":
p = Person('chb' , 18)
p.person = 'die'
print(p.person)#输出结果:die
print(p.__dict__)#输出结果:{'gender': '男', 'person': 'die', 'age': 18, 'name': 'chb'}
print(Person.person) #输出结果:alive
p.place[1] = '北京'
print(p.place)#输出结果:['北京' , '北京']
print(Person.place)#输出结果:['北京' , '北京']
不可变对象和可变对象的概念
这个之前理解过,大体可以理解为引用地址是否改变
在Python中,数字、字符串、元组是不可变的,,列表、字典、集合是可变的。