找到对应的个体完成对应的任务
1.类
定义:一系列事物的统称,同类事务必定有相同的特征,如:状态(成员变量),行为(成员方法)...(抽象)
1.1定义类的格式:
格式1:
class 类名:
pass
格式2:
class 类名:
属性
命名规则:大驼峰
1.2成员变量
1.2.1 定义格式一(常用):
class 类名:
def __init__(self):
self.变量名 = 值
self.变量名 = None
调用格式:
取值:对象名.变量名
赋值:对象名.变量名 = 值
1.2.2定义格式二(不常用,在使用对象时候直接给特有变量赋值)
对象名.变量名(类中没有出现的,这个对象特有的变量名) = 值
调用同上
注意:
1.如果变量名不存在则视为定义变量
2.如果变量名存在视为调用变量
1.3 成员方法:
1.3.1定义格式一(常用)
def 方法名(self):
方法体
调用格式一:
对象名.方法名()
注意:self仅在声明时占位,无需传递具体参数
1.3.2定义格式二:
def 方法名(self,形参1....)
方法体
调用格式二:
对象名.方法名(实参1....)
1.4init方法与魔术方法:
__init__()方法在对象创建时被运行,无需手动调用
魔术方法:对于程序中声明,定义的方法在特定时机自动执行的方法叫做魔术方法
方法名前面和后面各有两个_
__str__方法:在使用print()函数打印输出对象到屏幕是被运行,,无需手动调用,也属于魔术方法
定义格式:
def __str__(self):
return 打印对象时显示的信息
1.5成员方法调用成员
成员方法调用成员变量"self.变量名"
注意:慎重调用独有变量,当创建该对象没有定义此独有变量时会报错
成员方法调用成员方法"self.方法名()"
2.对象
具体的事务
创建对象:变量名 = 类名()
3.封装:
3.1私有:对成员私有化可以保护对象直接访问内部成员
私有属性定义格式: self.__属性名 = 值
私有方法定义格式:
def __方法名(self):
方法体
3.2标准定义格式:
3.2.1.对受保护的变量进行私有设置
self.__变量名 = 值
3.2.2.对外提供访问器:
访问器(get方法)
def get_变量名(self):
return self.__变量名
对外提供修改器:
修改器(set方法)
def set_变量名(self,值):
self.__变量名 = 值
3.3init传参
格式:
def __init__(self,形参列表):
self.__属性名1 = 形参1
self.__属性名2 = 形参2
......
创建:
变量名 = 类名(self, 值1,值2......)
3.4类变量:直接写到类的下面
定义格式:
class 类名:
变量名 = 值
调用格式:
赋值:类名.变量名 = 值
只能通过此方法修改值,不能够通过"对象名.变量名 = 值"来修改
取值:类名.变量名(推荐)
对象名.变量名(不推荐)
注意:
1.类中成员变量根据对象不同会发生改变,叫做实例变量
2.不会发生改变的叫类变量
类变量归属类,实例变量归属对象实例
3.5类方法:
定义格式:
class 类名:
@classmethod
def 方法名(cls,形参列表)
方法体
调用格式:
类名.方法名(实参列表) (推荐)
对象名.方法名(实参列表) (不推荐)
注意:
1.类方法中不允许使用实例方法和实例变量
2.实例方法中可以使用类变量和类方法
3.6静态方法:
定义格式:
class 类名:
@staticmethod
def 方法名(形参列表)
方法体
调用格式:
类名.方法名(实参列表)
对象名.方法名(实参列表)
注意:静态方法与类无关,通常转换成函数使用
3.7变量名称总结:
全局变量:直接写在文件中的变量或在函数中用global修饰的变量 5
局部变量:函数中没有用global的的变量,类的方法中没有带有self.的变量 2
公有变量:在类的方法中定义的带有self.的变量 1
独有变量:没有在类中定义,在类的外边使用某个对象时候定义的变量 5
私有变量:在类中变量名称前面带有两个_,只能在类中使用 3
类变量:直接写到类的下面 4
成员变量:共有变量
对象变量:对象的xxx变量
对象属性:对象的xxx属性
3.8方法名称总结:
方法:def 修饰的都是方法 实际叫的时候不是init方法 不是类方法,不是静态方法,就普通方法(成员方法,实例方法)
类方法:方法上面带有@classmethod
静态方法:方法上带有@staticmethod
函数:定义在类外边的
init方法也可以叫做构造方法
3.9对象名称总结:
对象,实例
4.继承
4.1A继承B,A是子类,B是父类
4.2定义格式
class 类名(父类名):
pass
4.3注意:
1.子类可以添加父类没有的成员
2.父类私有成员不能被继承
4.4查看某类继承自谁:类名.__mro__
4.5所有类的父类:object
4.6重写:
修改父类方法中的功能
子类调用父类的方法:
格式1:父类.方法名(对象)
格式2:super(本类名,对象).方法名()
格式3:super().方法名() (推荐)
4.7多继承
定义格式:
class 类名(父类1,父类2.....)
pass
注意:super().方法名()执行父类1的方法
4.8多态:一个对象可以干多种事情,需要有继承
4.9鸭子类型:对象在语法上满足调用关系,实际不具有对应的调用形态,则该对象为鸭子类型