Python面试题之Python对象反射、类反射、模块反射
2023-09-27 14:23:26 时间
python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)
一、getattr
对象获取
class Manager: role = "管理员" def __init__(self,name,sex,phone,mail): self.name = name self.sex = sex self.phone = phone self.mail = mail def createClass(self): print("create class") def createTeacher(self): print("createTeacher") def createStu(): print("createStu") manager = Manager("safly","男",123456,123456) print("---对象获取对象方法-----") f = getattr(manager,"createClass") f() print("---对象获取对象属性-----") name = getattr(manager,"name") print(name) print("---对象获取类属性-----") role = getattr(manager,"role") print(role) print("---对象获取类属性(可以设置默认值)-----") import logging if hasattr(manager,"role1"): role = getattr(manager,"role1","roleDefault") print(role) else: logging.warn("没有role属性") role = getattr(manager, "role1", "roleDefault") print(role)
类获取
class Manager: role = "管理员" def createClass(self): print("create class") def createStu(): print("createStu") m = Manager() f = getattr(Manager,"createClass") f(Manager) f = getattr(Manager,"createClass") f(m) role = getattr(Manager,"createStu") role() #对象获取类属性 role = getattr(Manager,"role") print(role)
输出如下:
create class create class createStu 管理员
二、setattr
设置类属性、方法
class Manager: role = "管理员" def __init__(self,name,sex,phone,mail): self.name = name self.sex = sex self.phone = phone self.mail = mail def createClass(self): print("create class") def createTeacher(self): print("createTeacher") def createStu(): print("createStu") manager = Manager("safly","男",123456,123456) print("----设置类属性------") setattr(Manager,"country","china") print(Manager.country) print("----删除类属性------") delattr(Manager,"country") # #删除报错 # print(Manager.country) print("----设置类方法------") def Method(parm): print("我是被绑定的class之外的方法parm--",parm) setattr(Manager,"Method",Method) Manager.Method("saf") Manager.Method(Manager) Manager.Method(manager) def Method(): print("我是被绑定的class之外的方法parm--") setattr(Manager,"Method",Method) Manager.Method()
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/demo.py ----设置类属性------ china ----删除类属性------ ----设置类方法------ 我是被绑定的class之外的方法parm-- saf 我是被绑定的class之外的方法parm-- <class '__main__.Manager'> 我是被绑定的class之外的方法parm-- <__main__.Manager object at 0x0343B4B0> 我是被绑定的class之外的方法parm-- Process finished with exit code 0
设置对象属性、方法
class Manager: role = "管理员" def __init__(self,name,sex,phone,mail): self.name = name self.sex = sex self.phone = phone self.mail = mail def createClass(self): print("create class") def createTeacher(self): print("createTeacher") def createStu(): print("createStu") manager = Manager("safly","男",123456,123456) print("----设置对象属性------") setattr(manager,"age",20) print(manager.age) print("----删除对象属性------") delattr(manager,"age") # 'Manager' object has no attribute 'age' # print(manager.age) print("---对象不能删除类属性---") setattr(Manager,"country","china") print(Manager.country) # delattr(manager,"country") # print(Manager.country) print("----设置对象方法------") def create_course(self): print('创建了一个课程') setattr(manager,'create_course',create_course) manager.create_course(manager) def create_grade(): print('创建了一个班级') setattr(manager,'create_grade',create_grade) manager.create_grade()
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/demo.py ----设置对象属性------ 20 ----删除对象属性------ ---对象不能删除类属性--- china ----设置对象方法------ 创建了一个课程 创建了一个班级 Process finished with exit code 0
三、模块反射
创建一个模块mokuai.py
a = 1 def method(rag): print(rag) return "666"
然后在python.py中导入以上模块
import mokuai print(getattr(mokuai,"a")) method = getattr(mokuai,"method") ret = method(8888) print(ret)
输出如下:
1 8888 666
四、反射本模块函数、变量
aa = 11 def method(): print("---method---") import sys print(sys.modules[__name__]) print(getattr(sys.modules[__name__],"aa")) f = getattr(sys.modules[__name__],"method") f()
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/demo.py <module '__main__' from 'E:/python/py_pro/demo.py'> 11 ---method--- Process finished with exit code 0
参考
相关文章
- python报错Nonetype object is not iterable
- 测试开发基础 | Python 算法与数据结构面试题系列一(附答案)
- python中定时任务apscheduler库用法详解
- python内置函数next()方法用法详解
- 精心整理的8道Python经典面试题合集!
- 【赶快收藏】15道Python常见面试题及答案!
- 复盘:Python open和with open的区别
- Python自动化测试面试题-编程篇
- python字符串前面加上'r'的作用
- Python爬虫技术--基础篇--错误,调试和测试(中)
- 【Python】【支付】微信支付
- python导出zabbix数据并发邮件脚本
- Python个人博客项目-2.我的主页应用开发
- python面试题
- 转【Python】Python-skier游戏[摘自.与孩子一起学编程]
- 2018年最常见的Python面试题&答案(上篇)
- 分享 10 个高频 Python 面试题
- Python版飞机大战游戏的设计(二)-----游戏框架搭建
- [Python 基础] 将文本文件内容读入到 数组的例子
- 老男孩上海校区Python面试题
- python面试题--判断一个字符串中的括号“(”“)”是否成对出现