python魔法属性和反射

#!/usr/bin/python3
# coding:utf-8
# Auther:AlphaPanda
# Description:与类相关的魔法属性
# Version:1
# Date:Wed Dec 4 02:22:28 EST 2019 class Man():
pass class Woman():
pass class Children(Man,Woman):
"""
成员属性:
skin,hair
成员方法:
eat,drink,__sleep
"""
skin = "黑皮肤"
hair = "黄头发" # 普通无参方法
def eat():
print("小孩会吃糖果")
# 绑定方法:
def drink(self):
print("小孩会吃奶奶")
# 大笑
def laugh(self,func):
print(func)
# 获取函数的名字
print(func.__name__)
print("小孩会大笑")
# 私有方法
def __sleep(self):
print("小孩喜欢睡觉")
# __dict__ 获取对象或类的内部成员结构
obj = Children()
print(obj.__dict__)
print(Children.__dict__) # __doc__ 获取对象或者类的内部文档
print(obj.__doc__)
print(Children.__doc__) # __name__ 获取类名函数名
def ceshi():
print("我是测试函数")
obj.laugh(ceshi) # __class__ 获取当前对象所属的类
cls = obj.__class__
print(cls.hair) # __bases__ 获取一个类直接继承的所有父类,返回元组
tup = Children.__bases__
print(tup) ### 反射 :通过字符串去操作类对象,或者模块中的属性方法
# 类的反射
# 1 hasattr() 检测对象/类中是否有指定成员
# 对象
res = hasattr(obj,"skin") # 属性
print(res)
res = hasattr(obj,"drink") # 方法
print(res) # 类
res = hasattr(Children,"eat")
print(res) # 2 getaddr() 获取对象/类成员的值 # 对象
res = getattr(obj,"hair") # 属性
print(res) res = getattr(obj,"hair123","第三个参数是默认值,如果该成员不存在,默认返回该值")
print(res) # 类:
res = getattr(Children,"drink")
print(res) # 反射对象当中的方法
func1 = getattr(obj,"drink")
print(func1) # 反射的是绑定到对象的方法,对象系统会自动传递
func1() # 反射类当中的方法
func2 = getattr(Children,"drink")
print(func2)
func2(2) """
func = input("请输入您要反射的行数:")
if hasattr(Children,func):
func_new = getattr(Children,func)
func_new()
else:
print("不存在该方法")
"""
# 3 setattr()设置对象/类成员的值
# 对象
setattr(obj,"name","wangwen")
print(obj.name) # 类:
setattr(Children,"wc",lambda : print("小孩会尿尿"))
print(Children.__dict__)
Children.wc() # 4 delattr() 删除对象/类成员的值
# 对象
print(obj.__dict__)
delattr(obj,"name")
print(obj.__dict__) # (2) 模块的反射
"""
包:文件夹
模块:文件
"""
def func1():
print("我是func1方法")
def func2():
print("我是func2方法")
def func3():
print("我是func3方法")
def func4():
print("我是func4方法") # sys.modules 返回一个字典,字典的键是加载的所有模块
import sys
print(sys.modules)
# 获取当前模块得对象,通过这个对象可以进行反射 __main__这个键对应的是本模块对象
mymodule = sys.modules["__main__"]
print(mymodule) # 小案例:通过字符串操作了该模块中相应的方法
while True:
strvar = input("请输入你要反射的方法:")
if hasattr(mymodule,strvar):
func = getattr(mymodule,strvar)
func()
else:
print("没有改函数")

最新文章

  1. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
  2. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
  3. Python黑帽编程 3.1 ARP欺骗
  4. Linux命令学习总结:cp命令
  5. [转]CSS编码规范
  6. 20145219 gdb调试汇编堆栈分析
  7. Thrift——初学
  8. Xcode中常用的快捷键
  9. SQL 复杂查询
  10. apache+php配置中遇到的问题
  11. PHP 获取目录
  12. ORA-04031: 无法分配 共享内存
  13. WebService-03-使用CXF开发服务端和客户端
  14. spring-cloud-Zuul学习(三)【中级篇】--Filter链 工作原理与Zuul原生Filter【重新定义spring cloud实践】
  15. Django之csrf防御机制
  16. 有趣的F-String
  17. Linux中KVM桥接的配置
  18. sas 获取字符串长度实例
  19. BVH with SAH (Bounding Volume Hierarchy with Surface Area Heuristic)
  20. 2F+1模式才是高可用 途牛旅游网 还是通过proxy层

热门文章

  1. 为应用创建多个独立python运行环境
  2. 使用fiddler 抓包app 网络连接不上的原因
  3. React进阶篇学习
  4. mysql联合索引如何创建
  5. 使用Jenkins结合Gogs和SonarQube对项目代码进行测试、部署、回滚,以及使用keepalived+haproxy调度至后端tomcat
  6. RabbitMQ入门教程(十):队列声明queueDeclare
  7. sql server 三角函数
  8. tomcat部署项目时 报错Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules
  9. java 导出自定义样式excel
  10. 封装运动框架基本函数(多个属性包括透明度和zIndex)