Python面向对象之-反射
一: 概述
Python中一切皆对象,在Python中的反射:通过字符串的形式操作对象的属性或者方法
- hasattr 判断是对象否有改属性或者方法,有就返回True,没有就返回false
- getattr 如果是属性获得该属性的值,如果是方法获得该方法的内存地址
二: 在模块中使用反射
两个文件,main,py,start,py 即Python的模块
mian.py文件内容如下
def func1():
print('func1') def func2():
print('func2')
start.py文件内容如下
print(hasattr(main,'func1'))
print(hasattr(main,'func2'))
print(hasattr(main,'func3'))
执行如果如下
True
True
False
三: Python 面向对象中使用反射
class Person:
role = 'person'
def __init__(self,name):
self.name = name def walk(self):
print("%s is walking"%self.name) wangys = Person('wangys') print(hasattr(wangys,'role'))
print(hasattr(wangys,'name'))
print(hasattr(wangys,'walk'))
print(hasattr(wangys,'eat'))
True
True
True
False print(getattr(wangys,'role'))
print(getattr(wangys,'name'))
print(getattr(wangys,'walk'))
getattr(wangys,'walk')() person
wangys
<bound method Person.walk of <__main__.Person object at 0x00000216037DDA90>>
wangys is walking
通常hasattr跟getattr结合使用
class Person:
role = 'person'
def __init__(self,name):
self.name = name def walk(self):
print("%s is walking"%self.name) wangys = Person('wangys') if hasattr(wangys,'role'):
print(getattr(wangys,'role')) if hasattr(wangys,'walk'):
getattr(wangys,'walk')() if hasattr(wangys,'eat'):
getattr(wangys,'eat')()
else:
print('没有改方法') person
wangys is walking
没有改方法
Python面向对象之-反射的更多相关文章
- Python 面向对象之反射
Python 面向对象之反射 TOC 什么是反射? hasattr getattr setattr delattr 哪些对象可以使用反射 反射的好处 例子一 例子二 什么是反射? 程序可以访问.检查和 ...
- python 面向对象之反射及内置方法
面向对象之反射及内置方法 一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静 ...
- python面向对象的反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) getattr # 根据字符串的形式,去对象中找成员.hasattr # 根据字符 ...
- Python面向对象之反射,双下方法
一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- python面向对象进阶 反射 单例模式 以及python实现类似java接口功能
本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...
- 第三十四篇 Python面向对象之 反射(自省)
什么是反射? 反射的概念是由Smith在1982年提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语 ...
- Python面向对象之反射
一.反射的基本概念 二.反射示例 三.反射的应用 一.反射的基本概念 反射:可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),Python中一切皆对象,都可以使用反射. 反射有 ...
- Python 面向对象 (补充) , 反射 , 内置函数
面向对象中内置函数 issubclass方法: 检查第一个参数是否是第二个参数的子子孙孙类 返回 : 是一个布尔值 class Base(object): pass class Foo( ...
- python面向对象之反射和内置方法
一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被 ...
随机推荐
- [转帖]Sqlcmd使用详解
Sqlcmd使用详解 2018年09月17日 13:36:39 吥輕誩放棄 阅读数:3053 版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...
- [转帖]UTC时间、GMT时间、本地时间、Unix时间戳
UTC时间.GMT时间.本地时间.Unix时间戳 https://www.cnblogs.com/xwdreamer/p/8761825.html 引用: https://blog.csdn.net/ ...
- Android技术框架——Dagger2
Dagger2 是一个Android依赖注入框架.没错依赖注入,学习过spring的同学看到这词,应该是挺熟悉的.当然既然是Android的课题,我们就来聊聊Dagger2 ,android开发当前非 ...
- Linux--虚拟环境
一 . 虚拟环境的安装 如果我们在进行多个django项目的话,只用一个物理环境的话,那么会影响效率,这时候我们局可以应用虚拟环境了 virtualenv #指定清华源下载pip的包 pip3 ins ...
- golang函数
一.函数语法 func 函数名(形参列表) (返回值列表){ ...... return 返回值 } 例如: package main import "fmt" func test ...
- github 管理代码: code.Aliyun
阿里云代码管理,,cao,搞了半天,配置百度就可以了,我只想说代码控制可以用github桌面版管理
- 【XSY3048 】Polynominal 数学
题目描述 给你三个正整数 \(a,b,c\),求有多少个系数均为非负整数的多项式 \(f(x)\) 满足 \(f(a)=b\) 且 \(f(b)=c\) \(a,b,c\leq {10}^{18}\) ...
- edusoho -A5: AppBundle UML
edusoho -A5: AppBundle UML
- HDOJ 5639 Transform
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5637 题意:有一个数x,你可以对x进行两种操作,1.反转x二进制其中任意一位2.x^y(y题目给出), ...
- CQOI2018异或序列 [莫队]
莫队板子 用于复习 #include <cstdio> #include <cstdlib> #include <algorithm> #include <c ...