类的属性:静态属性和动态属性(方法)函数
静态属性就是直接在类中定义的变量spa
动态属性(方法):就是定义在类中的方法(函数)code
注意:类的属性是共享给因此的对象的,而类的动态属性是绑定到全部对象的对象
建立一个对象/实例就会建立一个对象/实例的就会建立一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性blog
在obj.name会先从obj本身的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常继承
软件重要的方式:组合 继承it
组合指的是,指一个类的对象做为另外一个类对象的属性。使俩个类之间产生关系class
# class Foo: # count = 0 # def __init__(self): # self.count += 1 # f1 = Foo() # f2 = Foo() # print(Foo.count) # 0 类的方法调用 # print(f1.count) # 1 对象f1对类方法调用 # print(f2.count) #1 对象f2 对类方法的调用 #这是俩个不一样的对象因此,调用的结果都是为1
例:请你写一个类,可以统计一共实例化了多少个对象?
class Foo: count = 0 def __init__(self): Foo.count += 1 #生成一个对象就会是将类(Foo)的属性+1 f1 = Foo() print(f1.count) #1 f2 = Foo() f3= Foo() print(f1.count) #3 print(f3.count) #3
当类中属性发生改变的时候,对象中没有同名的属性。方法的时候,对象使用的属性名会跟着类中的变量走变量
class Foo: count = [0] f1 = Foo() f1.count[0]+= 1 print(f1.count[0]) #1 print(Foo.count) #[1] f1.count = [2] #这部操做是给f1这个对象空间中增长属性。 print(Foo.count) #[1]
只要对象的某个属性被直接赋值,那么必定是对象的命名空间发生了变化软件
因此结论:只要是静态变量,就直接用类名进行操做