类的加载顺序
类和类一个缩进内的代码在py文件从上到下解释的时候就已经被执行了
类中的代码永远是从上到下依次执行的
练习 :写一个类,能够自动的统计这个类有多少个对象 class A: Count = 0 def __init__(self,name): self.name = name A.Count += 1 a = A('alex') # 创建了一个新对象 a2 = A('alex2') print(A.Count)
类和对象的命名空间
类和对象是存储在两块命名空间里
变量 = 一个类的内存地址
对象去找在类的空间中的名字的前提 : 自己的空间里没有这个名字
class Student: country = 'China' def __init__(self,name): self.name = name zhang = Student('张尧') zou = Student('邹路') print(zhang.country) Student.country = '法国人' print(zhang.country) zhang.country = '日本人' # 给一个对象添加了一个属性 print(zou.country) print(zhang.country)
在操作静态变量的时候应尽量使用类名来操作 而不是使用对象名来操作
只要是对一个对象的名字直接赋值,那么就是在这个对象的空间内创建了新的属性
只要是对一个可变的数据类型内部的变化,那么仍然是所有的对象和类共享这个改变的结果
所有的静态变量都是用类名来操作,这样修改就能被所有的对象感知到
如果是对于可变数据类型的静态变量,操作的是这个数据内部的内容,也可以使用对象来调用
class B: l = [0] def __init__(self,name): self.name = name b1 = B('颜海清') b2 = B('孙晶晶') print(B.l) print(b1.l) print(b2.l) b1.l[0] += 1 print(b2.l[0]) b1.l = [123] print(b2.l)