面向对象(oop):
类:抽象概念,类型。类创建一个新类型,而对象是这个类的实例。用来描述具有相同的属性和方法的对象的集合。
对象:实际物体,类实例化对象
__init__ 方法:构造函数,实例化对象时自动调用的
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是类声明的内部,但是在类的其他成员方法之外声明的。
实例化:创建一个类的实例,类的具体对象。。
例:
Class ClassName:
<statement-1>
<statement-N>
类有一个名为__init__()的特殊方法(构造方法),该方法在类实例化时会自动 调用,像下面这样:
def __init__(self):
Self.date=[]析构方法:对象销毁的时候自动调用。
Def __del__(self):
self.__score = score # 私有属性,只允许在本类中访问
def __privateFun(self):# 私有方法
限制实例属性
__slots__ = ('name','age')# 只允许有‘name’和‘age’属性
继承:
子类继承父类的属性和方法(私有属性继承但不能修改)
可用super()函数或父类名.方法名
多继承:__mro__(获取类的继承顺序)
super()方法与类名.方法的区别:在于广度(super先广度在深度,类名.方法直接找到父类)
访问器(@property)和设置器(.setter)
访问器的好处就是可以直接访问私有属性,不用调用第三方函数
继承
class 类名(父类名):
pass
子类继承父类,可以直接享受父类中已经封装好的方法,不需要再次开发,根据自己所需封装子类特有的属性和方法
在子类中重写父类的方法在需要的位置使用supper().父类方法来调用父类方法的执行
多继承
子类可以拥有多个父类,并且具有所有父类的属性和方法
__mro__可以查看继承的先后顺序
多态
不同的子类对象调用相同的父类方法,产生不同的执行结果
魔法方法
--repr-- 在解释器环境下直接输出本对象,自动调用的方法
--len-- 调用len()函数的时候自动调用的方法
--call--调用本类对象的时候自动调用的方法
枚举法
from enum import Enum,unique
@ unique # 防止枚举成员的重复
class Menu(Eunm):
INSERT = 1
APPEND = 2
print(Menu.INSERT.value)
print(Menu.INSERT.value == 1)
print(Menu["INSERT"])