跳转至

面向对象

减少重复代码 扩展性 易读性


class MyClass:
    共有属性 =  

    //构造方法 实例化时被自动调用
    def __init__(self,参数...):
        //属性
        self.名称 = 参数1

    //类的方法
    def 名称(self,参数...):
        '''
        文档
        '''
        pass

共有属性: 全部对象共享 类.共有属性 被修改全部的对象共有属性都会被修改, 被修改过共有属性的实例化对象不会再被修改类共有属性而影响

_变量 私有

__变量 强制私有 不常使用

def _方法(self): 私有

def __方法(self): 强制私有 不常使用


实例化

实例 = 类(参数...)

实例 = 类(**字典)


继承

继承, 多重继承

class MyJc(父类..):

    # 子类构造方法
    def __init__(self,参数...):
        super().__init__(参数...)  # 一个继承可以使用
        父类.__init__(self,参数...)  # 可以把子类值传递给父类  多重继承

多态

定义: 重写 父类方法 或 属性

实现多态: 子类 属性名 或 方法名 和 父类 命名名称 一样


装饰器

@staticmethod

@property 方法可以像属性一样被调用

@staticmethod
def 名称():
    # 代码

@名称1.setter

方法可以像变量一样被赋值

@property
def 名称1(self):
    return self._参数

@名称1.setter
def 名称1(self, 参数):
    # 代码  被赋值时调用

@staticmethod

静态方法

方法可以不实例化类直接使用 类.静态方法()

@staticmethod
def 名称1(self, 参数):
    # 代码 

抽象类

抽象类不能被实例化, 所有的抽象方法必须被子类重写

from abc import ABCMeta, abstractmethod

class 名称(object, metaclass=ABCMeta):

    # 抽象方法
    @abstractmethod
        def 名称(self):
            """发出声音"""
            pass

cls

通过下方代码可以直接使用 名称 = 类名.方法(参数) 实例化

@classmethod
def 名称(cls, 参数):
    # 代码
    return cls(参数1, 参数2)

方法

hasattr

可以判断 实例 是否存在摸个 属性 或 方法

hasattr(实例,'名称')

setattr

添加(属性或方法) 或 (修改属性或方法),

setattr(实例,'名称','值')

技巧

添加属性

实例.变量 = 
变量 是不存在的变量

销毁对象

可以释放内存空间

del 实例

用法

# 获取一个属性的值
object.__getattribute__(self, '属性名')

dict

返回字典 包含属性名与值 可以像字典一样操作

# 获取字典 包含实例的全部属性与值
实例.__dict__

# 修改属性的值
实例.__dict__['属性名'] = 

# 给一个属性赋值
self.__dict__['属性名'] = 

# 获取一个属性的值
self.__dict__['属性名']

知识

封装

隐藏一切可以隐藏的实现细节,只向外界暴露(提供)简单的编程接口


魔术方法

类的专用方法

call

调用对象执行

def __call__(self,参数...):
    pass

str

print打印类会执行里面内容 并且会 返回内容

def __str__(self):
    return 

getitem

获取值 或 实现迭代功能

def __getitem__(self, 变量):
    # 代码
    return 

对象[]  # 会访问到这个方法

setitem

写入值

def __setitem__(self, key, value):
    # 代码

对象['key'] =   # 写入值

del

对象被调用 del 实例 销毁时执行

def __del__(self):
    # 代码

getattr

用户访问一个不存在的属性时执行

def __getattr__(self, name):
    # 代码
    return 

getattribute

属性被访问时 拦截控制

def __getattribute__(self, name):
    pass
    return 返回值

可以配合上 object.__getattribute__(self, '属性名')


setattr

属性被赋值时 拦截控制

def __setattr__(self, name, value):
    # 代码

可以配合上 self.__dict__['属性名'] = 值

delattr

属性被删除时

def __delattr__(self, name):
    # 代码

len

len() 调用时执行

def __len__(self):
    # 代码
    return 返回值

delitem

删除容器中指定元素的行为,相当于 del self[key]

def __delitem__(self, key):
    # 代码

contains

使用成员测试运算符 (in 或 not in) 时

def __contains__(self, item):
    # 代码
    return True  # True 或 False

字符串 in 实例

列表 in 实例

比较运算符

方法 描述
lt(self, other) 小于号的行为:实例 < 值
le(self, other) 小于等于号的行为:实例 <= 值
eq(self, other) 等于号的行为:实例 == 值
ne(self, other) 不等号的行为:实例 != 值
gt(self, other) 大于号的行为:实例 > 值
ge(self, other) 大于等于号的行为:实例 >= 值

前面加 r 则实例在右边 如 __rlt__(self, other) 值 < 实例

算术运算符

方法 描述
add(self, other) 加法的行为时:+
sub(self, other) 减法的行为时:-
mul(self, other) 乘法的行为时:*
truediv(self, other) 定义真除法的行为时:/
and(self, other) 与操作的行为时:&
or(self, other) 或操作的行为时:打不出来

前面加 r 则实例在右边 如 __rlt__(self, other) 值 < 实例