1.与类相关的魔术属性

# __dict__ 获取对象或类的内部成员结构
# __doc__ 获取对象或类的内部文档
# __name__ 获取类名函数名
# __class__ 获取当前对象所属的类
# __bases__ 获取一个类直接继承的所有父类,返回元组

2.反射

# 概念:通过字符串去操作类对象 或者 模块中的属性方法
# (1)类中的反射
#hasattr() 检测对象/类是否有指定的成员
#getattr() 获取对象/类成员的值
#setattr() 设置对象/类成员的值
#delattr() 删除对象/类成员的值

# (2)模块的反射
sys.modules 返回一个系统字典,字典的键是加载的所有模块

# ### 与类相关的魔术属性
class Human():passclass Man():passclass Woman():passclass Children(Man,Woman):'''类的功能: 描述一个小孩类的成员属性:eye类的成员方法:sleep __beat_doudou'''eye = "蓝色眼睛"# 普通方法def eat(): print("小孩喜欢吃东西") # 绑定方法 def sleep(self): print("小孩喜欢睡觉,一天睡20个小时候") def drink(self): print("小孩喜欢喝水,喝水尿") def cry(self, func): res = func.__name__ print(res, type(res)) # 私有绑定方法 def __beat_doudou(self): print("小孩喜欢打豆豆") # __dict__ 获取对象或类的内部成员结构 obj = Children() res = obj.__dict__ # {} print(res) print(Children.__dict__) # {'__module__': '__main__', # '__doc__': '\n\t类的功能: 描述一个小孩\n\t类的成员属性:eye\n\t类的成员方法:sleep __beat_doudou\n\t', # 'eye': '蓝色眼睛', # 'eat': <function Children.eat at 0x0000000001E83D08>, # 'sleep': <function Children.sleep at 0x0000000001E83D90>, # 'drink': <function Children.drink at 0x0000000001E83E18>, # 'cry': <function Children.cry at 0x0000000001E8B1E0>, # '_Children__beat_doudou': <function Children.__beat_doudou at 0x0000000001E8B268>} # __doc__ 获取对象或类的内部文档 res = Children.__doc__ # 类的功能: 描述一个小孩 # 类的成员属性: eye # 类的成员方法: sleep # __beat_doudou print(res) # __name__ 获取类名函数名 def myfunc(): print("我是函数") obj.cry(myfunc) # myfunc <class 'str'> # __class__ 获取当前对象所属的类 res = obj.__class__ # <class '__main__.Children'> print(res) # (<class '__main__.Man'>, <class '__main__.Woman'>) # __bases__ 获取一个类直接继承的所有父类,返回元组 res = Children.__bases__ print(res)

2.反射部分代码:# 概念:通过字符串去操作类对象 或者 模块中的属性方法

# (1)hasattr() 检测对象/类是否有指定的成员 [以是否能够调用为基准]
res = hasattr(obj, "eye")
print(res)
# True
res = hasattr(Children, "eat")
print(res)# (2)getattr() 获取对象/类成员的值
res = getattr(obj, "eye") print(res) # 蓝色眼睛 res = getattr(obj,"sleep") print(res) # 它返回的是一个绑定方法 # <bound method Children.sleep of <__main__.Children object at 0x0000000001E86DA0>> res() # 小孩喜欢睡觉,一天睡20个小时 res = getattr(Children,"eat") print(res) # <function Children.eat at 0x00000000027C3D08> res() # 小孩喜欢吃东西 res = getattr(Children,"sleep") # <function Children.sleep at 0x00000000027C3D90> print(res) # 它不是一个绑定方法 res(123) # 小孩喜欢睡觉,一天睡20个小时候 # getattr 第三个参数可选,如果获取不到这个值,可以添加默认提示.预防报错 res = getattr(obj,"abc","对不起这个真没有") print(res) # 对不起这个真没有 # strvar = input("请输入您要调用的函数") # if hasattr(obj,strvar): # res = getattr(obj,strvar) # res() # (3)setattr() 设置对象/类成员的值 setattr(obj,"hair","屎黄色") print(obj.hair) # 屎黄色 setattr(Children,"skin","绿色") print(Children.skin) # 绿色 # (4)delattr() 删除对象/类成员的值 delattr(obj,"hair") # print(obj.hair) delattr(Children,"skin") # print(Children.skin)

 
 (2)模块的反射
# sys.modules 返回一个系统字典,字典的键是加载的所有模块
import sys
res = sys.modules
print(res)
print(__name__) #__main__
mymodule = sys.modules[__name__]
print(mymodule) # 模块对象
# <module '__main__' from 'H:/python全栈视频/Day25 python \x7ftcp协议、交换机、局域网、根据arp找mac/day25/mymodule.py'>def func1(): print("这是func1方法") def func2(): print("这是func2方法") def func3(): print("这是func3方法") # 用户给我字符串,我反射对应的方法调用 while True: strvar = input("请输入您要调用的方法") if hasattr(mymodule,strvar): _func_ = getattr(mymodule,strvar) _func_() else: print("大哥,没有")

转载于:https://www.cnblogs.com/longerandergou/p/10957396.html

Day25 与类相关的魔术方法相关推荐

  1. python描述符魔术方法_学习笔记-Python基础9-面向对象编程OOP-类的成员描述符(property)、类的常用内置属性、类的常用魔术方法、类和对象的三种方法...

    一.类的成员描述符(property) 类的成员描述符是为了在类中,对类的成员属性进行相关操作而创建的一种方式,大部分属于数据清洗 属性有三种操作:get获取属性值.set修改或添加属性.delete ...

  2. php如何在特定情况下触发,php类知识点滴---魔术方法,系统在特定时机触发的方法...

    __get()获取私有或受保护属性时调用的方法 class coach { private $chairfit = "徐晓冬"; public function __constru ...

  3. python算术运算相关魔法方法_运算符相关的魔术方法

    运算符相关的魔术方法实在太多了,j就大概列举下面两类: 1.比较运算符魔术方法说明 __cmp__(self, other)如果该方法返回负数,说明 self < other; 返回正数,说明 ...

  4. 与类相关的魔术属性 反射

    ### 与类相关的魔术属性 #魔术方法后面加括号,魔术属性直接使用class Man():passclass Woman():passclass Children(Man,Woman):"& ...

  5. Python入门基础(6)--面向对象/类和对象/魔术方法

    面向对象基本概述 面向对象(Object Oriented Programming,OOP)编程:扩展性更强.可读性更好.面向对象的编程将数据和操作数据封装到对象中,组织代码和数据的方式更接近人的思维 ...

  6. php 类自动执行,php类中的魔术方法及类的自动加载

    类的模式方法都是 public 的,以 两个下划线开头,在某些情况下自动被调用,有点类似 hook 或者 事件触发. 魔术方法的传参方式不能使用引用. __construct() : 构造函数,实例化 ...

  7. (转)python类:magic魔术方法

    原文:https://blog.csdn.net/pipisorry/article/details/50708812 版权声明:本文为博主皮皮http://blog.csdn.net/pipisor ...

  8. python 析构函数_常用的python类的魔术方法

    对于很少使用python编写大型代码的朋友可能会忘记python还是一种面向对象的语言.在其他面向对象的语言中有构造函数.析构函数等等在生命周期不同时机自动调用的函数,python当然也是有的.除此之 ...

  9. python代码学习——类与对象提升(继承、超继承,类的例题,魔术方法)

    python代码学习--类与对象提升 继承 继承的特殊属性: 代码示例 方法的重写和覆盖(overrrid) 总结 超继承 继承中的初始化 多继承 例题 类的魔术方法 哈希(hash)和eq方法 bo ...

最新文章

  1. Qt——模态、非模态
  2. 因为这个工具,我在 GitHub 搜索源码的时间缩短了 50%!
  3. 小型荧光驱动电路实验电路
  4. 最近一月的娱乐生活:看电影,玩游戏
  5. mysql blob图片类型存储bug解决:索引超出了数组界限错误_索引超出了数组界限(Microsoft.SqlServer.Smo)...
  6. docker配置网易云镜像
  7. 复杂网络实验2:WS小世界模型(matlab)
  8. 解决小米手机无法安装证书问题
  9. Android9设备打开WIFI热点,Android9.0Wifi热点开启流程梳理
  10. PostgreSQL 中的单引号与双引号
  11. Linux查看系统版号
  12. Oracle删表报错ora00054,Oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT
  13. Proxy SwitchyOmega安装和使用
  14. 电大计算机试题及答案形成性,国开电大机械CAD/CAM形成性作业1答案
  15. 华为手表gt2e升级鸿蒙,华为Watch GT 2e全新升级,长达两周的续航可有点秀?
  16. 《留住那份你想留住的》#毕业季 | 致敬我们一生仅此一次的青春旅行!!#
  17. 自定义控件三部曲之动画篇(八)——PropertyValuesHolder与Keyframe
  18. python国内阿里下载源
  19. 杀毒软件已“死” 主动防御才是希望
  20. swiper轮播图插件的使用步骤

热门文章

  1. LeetCode 题 - 66. 列表元素加一 python实现
  2. Express-static
  3. python函数和函数式编程
  4. python3.6找到不_sqlite3模块
  5. Java基于stanford-corenlp实现英文词形还原
  6. Linux学习笔记4
  7. 【算法1-2】排序(今天刷洛谷了嘛)
  8. 【小程序】【Tips】【前端】交互【后端】从Json对象数组里面获取数据的方法 - PHP - JS 的原生方法
  9. php中正侧表达式_PHP中正则表达式详解(代码实例)
  10. intel编译器_试试吧!用 Go 写一个即时编译器(JIT)