面向对象
减少重复代码 扩展性 易读性
类
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)
值 < 实例