Python3.6简单反射操作示例


Posted in Python onJune 14, 2018

本文实例讲述了Python3.6简单反射操作。分享给大家供大家参考,具体如下:

# -*- coding:utf-8 -*-
#!python3
# -----------------------
# __Author : tyran
# __Date : 17-11-13
# -----------------------
class Base:
  def __init__(self):
    self.name = 'aaa'
    self.age = 18
  def show(self):
    print(self.age)
# 通过getattr()找到对象的成员
base = Base()
v = getattr(base, 'name')
print(v) # aaa
func1 = getattr(base, 'show')
func1() # 18
# 通过hasattr()查找成员是否存在
print(hasattr(base, 'name')) # True
print(hasattr(base, 'name1')) # False
# 通过setattr()给对象添加成员
setattr(base, 'k1', 'v1')
print(base.k1)
delattr(base, 'k1') # v1
# print(base.k1) 报错AttributeError: 'Base' object has no attribute 'k1'
# -------------------------------------------------------------------------
# Class也是一个对象
class ClassBase:
  sex = 'male'
  def __init__(self):
    self.name = 'aaa'
    self.age = 11
  @staticmethod
  def show():
    print('I am static')
  @classmethod
  def c_method(cls):
    print(cls.sex)
sex_value = getattr(ClassBase, 'sex')
print(sex_value)
s_func = getattr(ClassBase, 'show')
s_func()
c_func = getattr(ClassBase, 'c_method')
c_func()
# 这些都没问题
setattr(ClassBase, 'has_girlfriend', True) # 添加静态成员
print(ClassBase.has_girlfriend) # True
# ---------------同理,模块也是对象-------------
# 我新建了一个模块s1.py,我把内容复制下来
# class S1:
#   def __init__(self):
#     self.name = 'aaa'
#     self.age = 22
#
#   def show(self):
#     print(self.name)
#     print(self.age)
#
#
# def func1():
#   print('page1')
#
#
# def func2():
#   print('page2')
# 一个类,两函数
import s1
s1_class = getattr(s1, 'S1', None)
if s1_class is not None:
  c1 = s1_class()
  c1.show()
  # aaa
  # 22
getattr(s1, 'func1')() # page1
f2 = 'func2'
if hasattr(s1, f2):
  getattr(s1, 'func2')() # page2

注释中说明的s1.py如下:

# -*- coding:utf-8 -*-
#!python3
class S1:
  def __init__(self):
    self.name = 'aaa'
    self.age = 22
  def show(self):
    print(self.name)
    print(self.age)
def func1():
  print('page1')
def func2():
  print('page2')
# 一个类,两函数

程序运行结果:

Python3.6简单反射操作示例

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 元组(Tuple)操作详解
Mar 11 Python
解析Python中的异常处理
Apr 28 Python
Django中对数据查询结果进行排序的方法
Jul 17 Python
浅谈scrapy 的基本命令介绍
Jun 13 Python
Python使用Matplotlib实现Logos设计代码
Dec 25 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
Feb 07 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
python对XML文件的操作实现代码
Mar 27 Python
python使用建议与技巧分享(二)
Aug 17 Python
python中xlutils库用法浅析
Dec 29 Python
Python3.6日志Logging模块简单用法示例
Jun 14 #Python
Python实现的knn算法示例
Jun 14 #Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 #Python
Tensorflow 查看变量的值方法
Jun 14 #Python
对Tensorflow中权值和feature map的可视化详解
Jun 14 #Python
TensorFlow的权值更新方法
Jun 14 #Python
python字符串常用方法
Jun 14 #Python
You might like
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
解析php如何将日志写进syslog
2013/06/28 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
Express + Node.js实现登录拦截器的实例代码
2017/07/01 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
Python3学习urllib的使用方法示例
2017/11/29 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
python3实现随机数
2018/06/25 Python
Python3 assert断言实现原理解析
2020/03/02 Python
python实现用户名密码校验
2020/03/18 Python
详解python datetime模块
2020/08/17 Python
HTML5标签小集
2011/08/02 HTML / CSS
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
企业演讲稿范文
2013/12/28 职场文书
财务总监岗位职责
2014/03/07 职场文书
物流管理专业推荐信
2014/09/06 职场文书
2014年社区工会工作总结
2014/12/18 职场文书
导师对论文的学术评语
2015/01/04 职场文书
质量保证书
2015/01/17 职场文书
工程部文员岗位职责
2015/02/04 职场文书
浅谈Python魔法方法
2021/06/28 Java/Android
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android