#创建一个类,类里有类变量和实例变量
class A:
n = "你好"
list = []
def __init__(self,name,list):
self.name = name
self.lista = list
不带self的n,list 是类变量,可以直接调用
A.n 打印是"你好"
a = A("我是a",[1,2,3])
a.n #你好
a.name #我是a
此时将A加入新的全局变量
A.str = "我是str"
这时实例a也有str这个变量
a.str #我是str
我们在创建一个实例
b = A("我是b",[5,6,7])
b.str = "我是B的str"
同时再修改A.str = "我是新的str"
此时a.str 也同时修改为"我是新的str"
b.str 为"我是B的str"
说明当实例修改了全局变量后,内存将存储实例的全局变量,无论class A的全局变量怎么修改,都不会发生变化,
self.name,
self.lista
属于实例变量
a.name #为创建实例的参数,"我是a"
a.name = "我修改了a的name"
a.name #打印新修改的变量,"我修改了a的name"
此时直接修改类的实例变量
A.name = "我是A的name"
a.name 不会发生改变,依然是"我修改了a的name"
结论,无论直接修改类A的实例self的变量,实例化a= A() ,a的属性都不会发生变化
如果A.n,A.list A.str 的全局变量发生修改
实例a = A() 都继承了修改后的值
除非a.n = "我是a的n" 将全局变量修改了,内存发生变化,都将不会随着A()的变化而变化
类的全局变量有什么用呢?
class person:
city = "北京"
def __init__(self,name):
self.name = name
如果很多程序,都会调用这个Person 类
那么city相当于共享变量,在多的实例化都会用同一个变量,这样节省内存的开销
```python
class A(object):
def __init__(self,name):
self.name = name
self.list = []
class B(A):
def __init__(self,name):
super(B,self).__init__(name)
class D(object):
def add(self,object):
print(object.name)
self.list.append(2)
class C(A,D):
def __init__(self,name):
super(C,self).__init__(name)
b = B("b")
c = C("c")
c.add(b)
c.list #输出是2
当C类继承 A,D两个类,C可以使用D的方法,同时方法调用C的list属性,将list添加2,并且将b类传入D类里,打印了b类的name属性