反射
通过字符串去操作一个对象
字符串: 字符串类型
对象: 实例,类,当前文件(模块),其他模块
hasattr() #
getattr() #
setattr() # 增
delattr() # 删
函数VS方法
1.通过函数名可以大致判断
print(func)
print(obj.func)
2.通过模块types模块去验证
from types import FunctionType
from types import MethodType
print(isinstance(func, FunctionType)) # 判断是否是函数
print(isinstance(func, MethodType)) #判断是否是方法
# 类名调用fnuc就是一个函数 对象调用func就是方法
# 函数与方法
# 函数: 全部都是显性传参
# 方法: 存在隐性传参
特殊的上下方法
__len__
:一个对象之所以可以使用len()函数 根本原因是这个对象从属于的类中有__len__
双下方法
__hash_
: hash(obj) 会调用obj这个对象的类(基类)的__hash__
方法
__str__
;__repr__
: 展示功能一样, str优先级比repr高 print(obj)直接打印静态属性
__call__
: 对象+() 触发__call__
__eq__
: 对一个类的两个对象进行比较 触发__eq__
__del__
: 析构方法
__new__
: 构造方法
# 创造并返回一个新对象
# 单例模式
# 一个类只能实例化一个对象,无论实例化多少次,内存中都只有一个对象,都只使用这一个对象
__item__
: 对对象进行类似字典的操作
__enter__
,__exit__
: