Python3.6简单反射操作示例
作者:Tyran_U 发布时间:2021-05-04 03:32:05
标签:Python,反射
本文实例讲述了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')
# 一个类,两函数
程序运行结果:
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/tyrantu1989/article/details/78530180


猜你喜欢
- 前言:今天要总结的是如何用程序来实现短信发送功能。但是呢,可能需要我们调用一些api接口,我会详细介绍。都是自己学到的,害怕忘记,所以要总结
- --创建 test 表 ,插入数据CREATE TABLE test(code varchar(50), [values] varchar(
- 这篇文章主要介绍了Python代码块及缓存机制原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- Sublime Text 3非常实用,但是想要用好,一些快捷键不可或缺,所以转了这个快捷键汇总。用惯了vim,有些快捷键也懒得用了,尤其是在
- 导言:在前面的教程里我们探讨了如何为GridView控件添加radio buttons列。当用户最多只能选择一项数据时,我们可以在用户界面里
- 完整代码如下:import requestsfrom lxml import etreeimport randomimport osfrom
- SQL Server 2008已经发布,我们可以看到它在各方面都有了显著的进步,这些让人侧目之处和失望之处都有可能极大地影响大型企业的采购意
- pycharm报错提示:无法加载文件\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本在pycharm终端出现
- 可以自动轮换的页签 tabs with auto play fucntion<html><head><meta
- 使用一个简单的 XSL 样式表就可以将 XML 数据转换成 HTML。随着 XML 规范的不断演进,在新的版本中满足每个人的需要似乎已经成为
- 为了获取ROC曲线的最佳阈值,需要使用一个指标--约登指数,也称正确指数。借助于matlab的roc函数可以得出计算。% 1-specifi
- 本节列出了可以运行MySQL的操作系统。我们使用GNU Autoconf,因此将MySQL移植到所有使用Posix线程和C++编译器的现代系
- 前言图像分割是许多计算机视觉应用中的关键处理步骤,通常用于将图像划分为不同的区域,这些区域常常对应于真实世界的对象。因此,图像分割是图像识别
- 本文实例讲述了Python正则表达式分组概念与用法。分享给大家供大家参考,具体如下:正则表达式分组分组就是用一对圆括号“()”括起来的正则表
- 接下来,我们将实现微信朋友圈的爬取。如果直接用 Charles 或 mitmproxy 来监听微信朋友圈的接口数据,这是无法实现爬取的,因为
- 要在自己的网站上添加一个天气预报功能,是一个很普通的需求,实现起来也不是很难。今天来介绍几个简单的方法。使用第三方服务有这样的一种简单的方式
- 目录1. 需求是怎么来的2. 以不变应万变,是变也3. 最大限度地少改动4.对带参数的函数使用装饰器5. 给装饰器参数6.带类参数的装饰器7
- pymysql模块的使用查询一条数据fetchone()from pymysql import *conn = connect(  
- 一段基于OpenCV2的代码。作用是从摄像头获取帧并将帧写入指定的视频文件中。需要注意的是,视频文件所在的路径需要存在,例如D:/image
- 1.游戏画面1.1开始1.2射击怪物2.涉及知识点1.sprites2.pygame混音器3.图章 4.python