程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

反射

发布于2019-08-08 11:00     阅读(588)     评论(0)     点赞(5)     收藏(3)


反射

 

一、getatter, hasatter, delatter

1、getatter

 

复制代码
class Teacher:
    dic = {'查看学生信息':' ','查看老师信息':' '}
    def show_student(self):
        print('show_student')
    def show_teacher(self):
        print('show_teacher')
    @classmethod
    def func(cls):
        print('hahaha')

ret1 = getattr(Teacher,'dic')  # 获取类Teacher里面的属性dic,可等同于Teacher.dic 类也是对象
print(ret1)
ret2= getattr(Teacher,'func')  # 类.方法等同于Teacher.func
print(ret2)  # 打印的是地址
ret2()  # 地址加括号才是执行代码
复制代码

 

运行结果:

{'查看老师信息': ' ', '查看学生信息': ' '}
<bound method Teacher.func of <class '__main__.Teacher'>>
hahaha

 

2、hasatter

  • getatter和hasatter属于夫妻党,先用hasatter判断是否存在,再用getatter获取对应的方法属性
复制代码
class Teacher:
    dic = {'查看学生信息':' ','查看老师信息':' '}
    def show_student(self):
        print('show_student')
    def show_teacher(self):
        print('show_teacher')
    @classmethod
    def func(cls):
        print('hahaha')
if hasattr(Teacher,'dic4'):  # 判断是否在类Teacher中存在dic4,没有则不会执行以下代码,并且不会报错
    ret = getattr(Teacher,'dic4')
    print(ret)
if hasattr(Teacher,'dic'):  # 判断是否在类Teacher中存在dic,有则会执行以下代码
    ret1 = getattr(Teacher,'dic')  # 获取类Teacher里面的属性dic,可等同于Teacher.dic 类也是对象
    print(ret1)
复制代码

 

运行结果:

{'查看学生信息': ' ', '查看老师信息': ' '}

for循环,用户交互与夫妻档的结合:

复制代码
class Teacher:
    dic = {'查看学生信息':'show_student','查看老师信息':'show_teacher'}
    def show_student(self):
        print('show_student')
    def show_teacher(self):
        print('show_teacher')
    @classmethod
    def func(cls):
        print('hahaha')

alex = Teacher()  # 实例化
print(alex.show_student())  # 对象.方法函数
print(alex.show_teacher())  # 对象.方法函数
for k in Teacher.dic:
    print(k)  # 打印字典里面的key
key = input('输入需求:')  # 根据用户需求是要显示学生的还是老师的
print(Teacher.dic[key])  # 打印你的需求。也可以不直接打印而是通过下面的夫妻档来完成
if hasattr(alex,Teacher.dic[key]):  # 夫妻档判断用户输入的需求是否存在
    func = getattr(alex,Teacher.dic[key])
    func()
复制代码

运行结果:

复制代码
show_student
None
show_teacher
None
查看学生信息
查看老师信息
输入需求:查看学生信息
show_student
show_student
复制代码

 

3、小结

通过反射可以学到:

  • 对象名可以获取对象属性和普通方法
  • 类名可以获取静态属性和类方法还有静态方法
  • 普通函数方法的参数:self
  • 静态方法:@staticmethod
  • 类方法:@classmethod
  • 属性方法:@property

 



所属网站分类: 技术文章 > 博客

作者:天下

链接:https://www.pythonheidong.com/blog/article/13444/cd2c5c1be4d351a4bcf4/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

5 0
收藏该文
已收藏

评论内容:(最多支持255个字符)