class Dog: def __init__(self,name,age,salary): self.name = name self.age = age self.salary = salary#等号的左右的名称可以不同,左边是属性名,右边是形参名 def bulk(self,voice) print('%s is bulking,,,,%s' %s(self.name,voice)) def __del__(): print('我是析构函数') taidi = Dog(taidi,3,2300) taidi.bulk()
一.类的存储与实例对象的存储
类定义好后会为类开辟一块空间。
实例化一个类后会将初始化的数据和对象名一并传入类中,并在类的外面开辟一块空间用于存数据。
注意:初始化时会将对象当形参(self)传入类
实例对象不会将类中共同的方法或变量的存下来,而是通过self进行访问。
二.变量的分类
实例属性(静态属性)只对该实例对象有作用域
实例方法(动态属性)只对该实例对象有作用域
类变量 对所有的实例对象都有作用域,只存放在类里面
注意:当类变量与实例变量矛盾时,实例变量有效,通过实例改类变量时,是将类变量复制一份到该实例对象中 ,将复制后的进行修改。但list不一样,通过实例改类变量的list时就是在类中修改。
二.构造函数
作用:实例化类时,进行初始化,并开辟一块空间。但不会将类中的方法都复制一边
实例化类时构造函数会自动执行
三.析构函数 但不能有参数,实例释放和销毁时自动执行,进行扫尾工作,如关闭数据库链接。
四.私有属性,私有方法
私有属性或方法名前加 __(双下划线)外部不能访问,但可以通过类中其他的方法访问。
五.继承
在构造一个类时将要继承的父类当做参数传入。
class school_member(object): #父类,object是基类,是新式类的写法 def __init__(self,name,age,id): self.name=name self.age=age self.id=id def enroll(self): #注册函数 print('welcom to %s"%self.name) class student(school_member): def __init__(self,name,age,id,money): #school_member.__init__(self,name,age,id) super(sudent,self).__init__(name,age,id) self.money=money
六.多继承
多继承的顺序,分为广度优先和深度优先
Python3中新式类和经典类都是广度优先
Python2中 新式类是广度优先 经典类是深度优先
class A(object): def __init__(self): print('A') class B(A): def __init__(self): print('B') class C(A): def __init__(self): print('C') class D(B,C): def __init__(self): print('D')
说明:B,C继承了A,而D继承B,C
广度优先:先在B中找有没有构造函数,没有再在C中找,最后在A中找
深度优先:在B中找没有再再A中找,后面依次类推。
多继承的顺序是按参数从左向右。并依次寻找是否有构造函数,有了就不执行后面的构造函数,前面构造的属性,可以在另一个父类中调用。