面向对象

类的定义

  1. class Person:

  2. class person():

  3. calss Person(object):

成员变量与类变量

类变量: 在类中定义,且在函数体外.称为类变量(静态成员变量)

成员变量: 定义在函数中,并且绑定在self身上的变量,称为成员变量

  1. 使用类变量:

普通的变量,定义在我们的类中,例如一些静态的不需要改变的变量,如 PI=3.1415926

  1. 使用成员变量:

在创建对象的时候,需要初始化的变量,我们一般使用成员变量.

  1. 使用普通变量:

若此变量只是计算产生的中间量,后续不需要使用的情况下,可以使用普通变量.

类变量与成员变量区别:

  1. 位置不同

  2. 出现的时间不同, 类变量定义类的时候就产生了,成员变量实例化对象时才产生.

  3. 调用方式不同,类变量可通过类名来调用,也能使用对象调用, 成员变量只能通过对象来调用.

  4. 优先级不同,当类变量与成员变量同时存在的时候,使用对象来进行调用,优先调用成员变量

  5. 若要更改类变量,需要用类名来调用类变量重新赋值, 用对象调用类变量赋值时,只是相当于给对象添加了一个额外属性

动态的给类添加属性以及方法

  1. 动态的给对象绑定的属性以及方法,只作用于当前对象,对其他对象不起作用.

  2. 动态的给类绑定的属性和方法,作用于类中所有对象.a.remove(7)

  3. 当不想随意给对象添加一些属性时,可以使用 slots 属性,这个属性是一个元组,我们可以将需要添加的属性的属性名一一列举写到元组中.

  4. 使用slots设置的类只对当前类的实力起作用,对子类不起作用.

 

0

何时使用成员方法,类方法,,静态方法?

  1. 当写在类中的函数跟self有关系的时候,即使用了成员变量或者成员方法时,必须将此方法写为成员方法;

  2. 当写在类中的函数,跟self没关系,即没有使用成员变量和成员方法时,但又和类变量或者类方法有关系(在此函数中,可能使用了类变量或者类方法),这时可以将其声明为类方法;

  3. 当写在类中的函数,既跟self没关系,跟类也没关系,即没有使用成员变量也没有使用类变量,没使用类方法和成员方法,静态方法也没使用,此时我们就可以将其声明为静态方法.

黑魔法 访问私有变量

被私有化的属性不能直接访问的原因: python解释器解释被私有化的属性解释成: _类名__属性名, 当我们直接访问时就会出错;但是我们可以通过python解释的 _类名__属性名 来进行访问,但是不建议这么做,因为不同解释器解释出来的变量名可能不同.

语法糖(@property) 访问私有变量

作用:将函数作为属性来进行调用

在getter的方法中添加@property

在setter的方法中添加@属性名(该函数名).setter

注意:两个加装饰器的方法名要相同

 

继承

当子类中有特殊的属性时,需要手动调用一下父类的构造方法

多继承

  1. 若同时继承多个父类的时候,需要手动初始化父类的构造函数

  2. 当父类中的函数名出现相同的时候,优先选择写在继承元组前面的那个

  3. 一个子类可以有多个父类,一个父类也可以有多个子类.

  4.  

 

 

 

原文地址:https://www.cnblogs.com/Deaseyy/p/10859738.html