# 面向对象的进阶# 其他常用模块# 作业 考试题# 网络编程  2天# ftp作业

# class A:pass# class B(A):pass# a = A()# print(isinstance(a,A))返回true,判断a是不是A的对象# print(issubclass(B,A))返回true,判断B是不是A的子类# print(issubclass(A,B))》》》返回Flase

# 反射 : 是用字符串类型的名字 去操作 变量# name = 1# eval('print(name)') # 安全隐患

# 反射 就没有安全问题

# 反射 : 是用字符串类型的名字 去操作 变量

# 反射对象中的属性和方法 # hasattr getattr setattr delattr# class A:# def func(self):# print('in func')## a = A()# a.name = 'alex'# a.age = 63# # 反射对象的属性 # ret = getattr(a,'name') # 通过变量名的字符串形式取到的值# print(ret)# print(a.__dict__)# 变量名 = input('>>>') # func# print(getattr(a,变量名))#如果不用面向对象的反射,也可以用if判断input输入内容是否等于‘name’来返回a.name的值# print(a.__dict__[变量名])#不用反射、if判断,也可以用__dict__,但遇到需要执行func时,if和字典就不管用了,要用反射拿到方法的内存地址## # 反射对象的方法 # a.func()# ret = getattr(a,'func')# ret()## class A:# price = 20# @classmethod# def func(cls):# print('in func')# # 反射类的属性 # # A.price# print(getattr(A,'price'))## # 反射类的方法 :classmethod staticmethod# # A.func()# if hasattr(A,'func'):#如果存在才执行# getattr(A,'func')()

#模块(模块实际就是一个类,my是类名)/*一个my的模块文件 
day = 'Monday'  # 周一
def wahaha():
    print('wahahaha')
class C:
    pass
*/ # import my # 反射模块的属性 # print(my.day) # print(getattr(my,'day')) 

# 反射模块的方法 # getattr(my,'wahaha')() 

# 内置模块也能用 # time # asctime # import time # print(getattr(time,'time')()) # print(getattr(time,'asctime')()) 

# def qqxing(): # print('qqxing') # year = 2018 # import sys # # print(sys.modules['__main__'].year)#modules查看所有导入的模块,sys.modules['__main__']找到自己的模块 # # 反射自己模块中的变量 # # print(getattr(sys.modules['__main__'],'year')) # # # 反射自己模块中的函数 # # getattr(sys.modules['__main__'],'qqxing')() # 变量名 = input('>>>') # print(getattr(sys.modules[__name__],变量名))#取自己模块名字时,不应该用_main_写死,要想自己模块为其他模块A导入对象时这段代码还生效,尽量使用变量_name_来反射,因为此时的_main_不为_main_,而是'模块A名字'

# 要反射的函数有参数怎么办? # print(time.strftime('%Y-%m-%d %H:%M:S')) # print(getattr(time,'strftime')('%Y-%m-%d %H:%M:S')) 

# 一个模块中的类能不能反射得到 # import my # print(getattr(my,'C')())#拿到一个类C,加()实例化 # if hasattr(my,'name'): # getattr(my,'name') hasattr和getattr常搭配使用,防止报错 总之,(什么.什么)这种样式都可以用反射来拿到 

# 重要程度半颗星 # setattr 设置修改变量 class A: pass a = A() setattr(a,'name','nezha') #添加到对象的空间 setattr(A,'name','alex') #添加到类的空间 print(A.name) print(a.name) 

# delattr 删除一个变量 delattr(a,'name') #这里是删除对象a里的name属性('nezha') print(a.name) #对象a的name已被删除,所以找类A的name》》'alex' delattr(A,'name') #类A的name已被删除,所以打印会报错,找不到name了 print(a.name)

转载于:https://www.cnblogs.com/mys6/p/10666759.html

面向对象进阶-反射(二)重要知识点相关推荐

  1. 面向对象进阶(二)----------类的内置方法

    一.isinstance(obj,cls)和issubclass(sub,super) 1. isinstance(obj,cls): 检查是否obj是否是类 cls 的对象 class Player ...

  2. 0418 面向对象进阶 反射内置函数

    绑定:class A:def func1(self):pass # 对象与方法之间的绑定def func4(self): pass # 对象与方法之间的绑定 @classmethoddef func2 ...

  3. 打怪升级之小白的大数据之旅(二十五)<Java面向对象进阶之IO流三 其他常见流>

    打怪升级之小白的大数据之旅(二十五) Java面向对象进阶之IO流三 其他常见流 上次回顾 上一章,我们学习了常用的字节流与字符流,本章,我会将其他的一些常见的流进行分享,IO流很多,我介绍不完,就挑 ...

  4. python内置函数面向对象_Pyhton——面向对象进阶二:类的内置函数补充、描述符...

    Pyhton--面向对象进阶二: 一.类的内置函数补充 1.isinstance(obj,cls)--检查obj是否是该类的对象 class Hoo: def __init__(self,name,t ...

  5. 第十二课 Java基础篇——面向对象进阶(一)

    一.Static static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量 静态变量是随着类的加载而加载的,优先于对象出现的 练习1.定义数组工具类 需求:在实际开发中,经常会遇到一 ...

  6. python开发需要掌握哪些知识-Python基础进阶需要掌握哪些知识点?

    Python基础进阶需要掌握哪些知识点?Python将是每个程序员的标配,有编程基础再掌握Python语言对于日后的升职加薪更有利.Python语言简洁利于理解,语法上相对容易能够让开发者更专注于业务 ...

  7. JavaSE——面向对象进阶(封装、this、static、代码块、包、权限修饰符、main方法详解)

    第2节 面向对象进阶 一.封装与private 概述: 封装的意义在于保护或者防止代码(数据)被我们无意中破坏.保护成员属性,不让类以外的程序直接访问和修改. 封装原则: 隐藏对象的属性和实现细节,仅 ...

  8. Python面向对象进阶和socket网络编程

    写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese:def __init__(self, ...

  9. Python中级 —— 01面向对象进阶

    面向对象进阶 总结.补充(http://blog.csdn.net/fgf00/article/details/52479307) 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 ...

最新文章

  1. 华为如何生成日志_华为应用市场AppGallery Connect开发者沙龙:全面提升应用质量...
  2. Codeforces 798C:Mike and gcd problem
  3. Insertion Sort List
  4. Delphi设置表格样式
  5. chattr和lsattr命令的使用(对于root用户也无法修改删除的操作问题)
  6. CTF中遇到不知道文件类型_AE中你不知道的隐藏功能-Mask与特效
  7. ubuntu 21.04 版本上 安装 sqlcmd
  8. linux无法关机 grub2,Ubuntu关机卡住无法关机如何解决?
  9. 补遗篇之volatile
  10. 编程中的Eric常用的编程单词的缩写
  11. LU分解的矩阵逆运算
  12. 怎么查看视频的md5值
  13. rstudio查询命令_RStudio终端操作
  14. 三子棋编程题(上)--跟着鹏哥,学习C语言打卡第三天!!
  15. STM32+Air202+Air530+HXDZ-30102-ACC心率血氧GPS采集上传到阿里云
  16. 关于为什么sklearn画出来的ROC曲线图是折线的问题
  17. 利用底层键盘钩子拦载任意按键(回调版)
  18. springboot使用Cassandra组合查询数据
  19. 《趣弹幕-滚动LED显示屏-隐私协议》
  20. win10玩cf不能全屏_神奇的工作室ghost 不能启动

热门文章

  1. macOS下如何使用命令启动数据库/停止数据库/重启数据库(MySQL)
  2. mysql 触发器计算总价,mysql’插入’触发器根据其他字段计算字段
  3. linux安装meld rpm,Linux meld安装
  4. python 40位的数减个位数_Python——进制表示与转换
  5. stata F值缺失_stata面板数据回归操作之GMM
  6. python 字体_python docx字体设置
  7. websocket没准备好如何解决_那些很重要,但是不常用的技术,websocket
  8. php魔术变量的概念_PHP 魔术变量和魔术函数详解
  9. 为什么单模光端机价格比多模光端机价格高
  10. 电话光端机安装步骤详解