python中的魔法方法

魔法方法

概念

  • 在一定时机下,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())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值