类的定义
-
class Person:
-
class person():
-
calss Person(object):
成员变量与类变量
类变量: 在类中定义,且在函数体外.称为类变量(静态成员变量)
成员变量: 定义在函数中,并且绑定在self身上的变量,称为成员变量
-
使用类变量:
普通的变量,定义在我们的类中,例如一些静态的不需要改变的变量,如 PI=3.1415926
-
使用成员变量:
在创建对象的时候,需要初始化的变量,我们一般使用成员变量.
-
使用普通变量:
若此变量只是计算产生的中间量,后续不需要使用的情况下,可以使用普通变量.
类变量与成员变量区别:
-
位置不同
-
出现的时间不同, 类变量定义类的时候就产生了,成员变量实例化对象时才产生.
-
调用方式不同,类变量可通过类名来调用,也能使用对象调用, 成员变量只能通过对象来调用.
-
优先级不同,当类变量与成员变量同时存在的时候,使用对象来进行调用,优先调用成员变量
-
若要更改类变量,需要用类名来调用类变量重新赋值, 用对象调用类变量赋值时,只是相当于给对象添加了一个额外属性
动态的给类添加属性以及方法
-
动态的给对象绑定的属性以及方法,只作用于当前对象,对其他对象不起作用.
-
动态的给类绑定的属性和方法,作用于类中所有对象.a.remove(7)
-
当不想随意给对象添加一些属性时,可以使用 slots 属性,这个属性是一个元组,我们可以将需要添加的属性的属性名一一列举写到元组中.
-
使用slots设置的类只对当前类的实力起作用,对子类不起作用.
0
何时使用成员方法,类方法,,静态方法?
-
当写在类中的函数跟self有关系的时候,即使用了成员变量或者成员方法时,必须将此方法写为成员方法;
-
当写在类中的函数,跟self没关系,即没有使用成员变量和成员方法时,但又和类变量或者类方法有关系(在此函数中,可能使用了类变量或者类方法),这时可以将其声明为类方法;
-
当写在类中的函数,既跟self没关系,跟类也没关系,即没有使用成员变量也没有使用类变量,没使用类方法和成员方法,静态方法也没使用,此时我们就可以将其声明为静态方法.
黑魔法 访问私有变量
被私有化的属性不能直接访问的原因: python解释器解释被私有化的属性解释成: _类名__属性名, 当我们直接访问时就会出错;但是我们可以通过python解释的 _类名__属性名 来进行访问,但是不建议这么做,因为不同解释器解释出来的变量名可能不同.
语法糖(@property) 访问私有变量
作用:将函数作为属性来进行调用
在getter的方法中添加@property
在setter的方法中添加@属性名(该函数名).setter
注意:两个加装饰器的方法名要相同
继承
当子类中有特殊的属性时,需要手动调用一下父类的构造方法
多继承
-
若同时继承多个父类的时候,需要手动初始化父类的构造函数
-
当父类中的函数名出现相同的时候,优先选择写在继承元组前面的那个
-
一个子类可以有多个父类,一个父类也可以有多个子类.
-