魔法方法
概念
- 在一定时机下,pyhton解释器自动执行的方法
常用魔法方法
- _ _ del _ _
- 执行时机
当一个对象在内存中被销毁的时候自动执行
案例验证(内存问题)
- 执行时机
- _ _ call _ _
- 执行时机
对象后面加括号,触发执行。即:对象() 或者 类()()
- 执行时机
案例验证:
class A():
pass a = A()
#直接调用对象 a()
- _ _ repr _ _
- 执行时机
改变对象的字符串显示
此方法是__str__()的备胎,如果找不到__str__()就会找__repr__()方法
%r 默认调用的是 repr()方法,如果是字符串会默认加上 ‘’
repr()方法默认调用__repr()方法
- 执行时机
- _ _ new _ _
- 执行时机
在实例化对时触发
必须返回一个对象实例
- 执行时机
is 和==的区别
- is比较两个对象是否是同一个
- ==比较两个对象内容是否一致
- 默认会调用对象的 eq()方法。继承自 object 的 eq 方法比较两个对象的 id
- _ _ hash _ _方法
哈希(hash)也翻译作散列。Hash算法,是将一个不定长的输入,通过哈希函数变换成一个定长的输出,即哈希值。这种哈希变换是一种单向运算,具有不可逆性即不能根据哈希值还原出输入信息。常见的 hash算法有:SM3、MD5、SHA-1 等
set中存储自定义对象
重写hash与eq
类的常用函数
1. issubclass
格式: issubclass(被检测类,父类)
检测一个类是否是另外一个类的子类
2. isinstance
格式:isinstance(对象,类)
检测一个对象是否是某个类的对象
3. 反射方法
- getattr()
判断是否有此变量,返回 bool 值
格式:getattr(对象,‘属性名’[,成员不存在时的默认值])
案例:
#获取对象的属性,方法
p = Person(‘Tom’,12)
n = getattr(p,‘name’)
print(n)
#获取方法的引用
m = getattr(p,‘showInfo’)
m()
- hasattr()
检测对象是否具有某个成员
语法: hasattr(object,name)
案例:
#判断对象是否具有属性,方法
print(hasattr(p,‘name’))
print(hasattr(p,‘dict’))
print(hasattr(p,‘str’))
- setattr()
给类或者对象设置属性或者方法 (用的场合很少,了解即可) - delattr()
删除类或者对象的属性或方法(用的场合很少,了解即可) - 反射导入模块的属性、函数、类
第一个参数是模块名称,第二个参数是变量名称
案例:使用反射技术,完成一个自定义模块中变量,函数,类等访问
#从模块test02中,反射到指定的类
s =getattr(test02,‘Sniper’)
- 反射自己模块中的属性、函数
- sys.modules 当前已经加载进来的模块
- 获取当前模块中变量num的值
import sys
print(sys.modules[‘main’])
p1 =getattr(sys.modules[‘main’],‘num’)
p2 =getattr(sys.modules[name],‘num’)
print(type§)
print(p1)
print(p2)
- 反射系统模块
import time
print(time.time())
#等价
t = getattr(time,‘time’)
print(t())