1. 名词解释
类(class):
简单理解为具有相同属性和方法的对象的集合。定义了该集合中每个对象公有的属性和方法。
类变量:
公用。定义的位置在类中,函数外(使用较少)。在类方法中的定义的所有变量,都是此方法的局部变量,也就是只能在此方法中使用
实例变量:
函数(方法)中变量,供每个实例单独使用。
实例方法:
self,只能通过实例调用。
类方法:
@classmethod”装饰器,第一个参数位必须为cls,可以通过类或者实例变量调用。
静态方法:
@staticmethod”装饰起,参数不需要指定cls和self,可以通过类或者实例变量调用。
继承:
继承是面向对象的一个特点,通过继承,产生的新类(也叫子类)可以使用父类函数中某些方法和是属性,这个过程就叫做继承。
封装:
类中把某些属性和方法隐藏起来(或者说定义成私有的),只在类的内部使用、外部无法访问,或者留下少量接口(函数)供外部访问。
多态:
同一种调用方式,不同的执行结果(因为调用的对象不同,导致的结果不同,其实python的多态和c++等语言不同,因为python本身即就是鸭子类型语言,不需要可以强调多态。
方法重写:
发生在继承的场景下,也就是直接编写与父类中同名的函数,该函数就是对父类的函数的重写。
实例化:
用类生成一个实例,这个过程就叫做实例化。
2. 类的定义:
2.1 类的定义:
重点:
class,空格后面是类的名字,然后是小括号冒号(小括号可以添加要继承的类),注意缩进。
类变量,类变量可以被类和实例对象访问,被全部实例对象共享。
类方法,定义在类中,第一个参数为cls,需要使用@classmethod修饰,可以被类和实例对象访问,只能访问类变量
self,该方法只能被实例对象调用,可以访问类变量和实例变量
实例变量,实例变量只能被实例方法访问(类方法不可以)
静态方法,定义在类中,使用@staticmethod修饰,不限定参数的个数(建议不使用self,cls参数,因为在类中,这两个参数具有特殊意义),可以被实例对象和类调用,不能访问实例变量和实例方法,可以访问类变量和类方法(只能通过类名.类方法(类变量)访问)
2.2 self 和 cls
在类中,self和cls是具有特殊意义的,因此建议不要将关键字定义为其他作用
2.21 self:
实例方法。
(2)self指向的是类实例对象本身(注意:不是类)。
实例对象.实例方法调用,那么self参数不在参数传递范围内(因为self指向的就是实例对象本身),直接传递其他的参数即可。
类名.实例方法(实例对象,其他参数),区别于通过类直接调用。
示例:
运行结果:
2.22 cls:class的缩略
(1)作为函数的第一个参数,表明该参数是一个
类方法。
(2)cls指向的是类本身(注意:不是实例)。
类(或者实例对象).类方法调用,那么cls参数不在参数传递范围内(因为cls指向的就是类本身),直接传递其他的参数即可。
示例:
运行结果:
注意:cls和self作为参数时,是可以替代的(但是最好不要,为了代码的可读性,以防止因为疏忽造成的位未知问题)
2.3 类方法,实例方法,静态方法
实例方法:self作为第一个参数,只能被实例对象调用,可以操作类变量和实例变量
运行结果:
类方法: cls作为第一个参数,可以被实例对象和类调用,只能访问类变量
运行结果:
类方法调用实例变量:
运行结果:
静态方法:不需要self或者cls作为第一个参数,需要使用@staticmethod装饰器修饰,可以被实例对象和类调用,只能访问类变量
运行结果:
类方法和静态方法的区别:
(1)类方法需要装饰器 @classmethod修饰,静态方法需要装饰器@staticmethod修饰
(2)在访问类变量时,方式不同,静态方法只能通过类名访问,而类方法还可以通过cls关键字访问
2.4 类的特殊方法:
__init__ 方法: 构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值
使用示例:
运行结果:
__str__ 方法,在用户直接打印示例时,需要通过return返回输出内容;如果未明确定义,系统则返回实例地址
示例:
运行结果:
交互模式下,定义直接输入对象名称时回车显示的信息,需要