isinstance、issubclass、反射
一、isinstance、issubclass
# isinstance(obj, cls)
检查obj是否是cls的对象
class A(object):pass
a = A()
print(isinstance(a, A)) # True # issubclass(sub, super)
检查sub是否是super的派生类
class A(object):pass
class B(A):pass
print(issubclass(B, A)) # True
二、反射
用字符串形式的名字去操作对象相关的属性(python中一切皆对象)
hasattr、getattr
class A(object):
def __init__(self, name):
self.name = name def func(self):
print("func") a = A("pd") # 反射对象的属性
if hasattr(a, "name"):
ret = getattr(a, "name")
print(ret) # 反射对象的方法
if hasattr(a, "func"):
getattr(a, "func")() # func
class A(object):
name = "pd" @classmethod
def func(self):
print("func") # 反射类的属性
if hasattr(A, "name"):
ret = getattr(A, "name") # pd
print(ret) # 反射类的方法
if hasattr(A, "func"):
getattr(A, "func")() # func
# demo.py
name = "pd" def func():
print("func in demo") ######################### # test.py
import demo # 反射模块的属性
if hasattr(demo, "name"):
ret = getattr(demo, "name")
print(ret) #反 射模块的方法
if hasattr(demo, "func"):
getattr(demo, "func")()
import sys name = "pd" def func():
print("func") #反射本模块中的属性
if hasattr(sys.modules["__main__"], "name"):
ret = getattr(sys.modules["__main__"], "name")
print(ret) # pd #反射本模块中的函数
if hasattr(sys.modules["__main__"], "func"):
getattr(sys.modules["__main__"], "func")() # func
setattr:设置/修改变量
delattr:删除一个变量
class A(object):
name = "盲僧" def __init__(self, name):
self.name = name a = A("pd") setattr(a, "name", "诺手")
setattr(A, "name", "德玛")
print(a.name) # 诺手
print(A.name) # 德玛 delattr(a, "name")
print(a.name) # 德玛 对象的name属性已被删除,就找类的 delattr(A, "name")
print(A.name) # 报错 类中的name也被删除,找不到了
isinstance、issubclass、反射的更多相关文章
- isinstance与issubclass,反射
目录 isinstance与issubclass isinstance issubclass 反射 定义 反射在模块中的应用 内置方法 isinstance与issubclass isinstance ...
- 方法和函数,isinstance/issubclass/type以及反射
一丶,isinstance/issubclass/type 1.issubclass检查第一个参数是否是第二个参数的 子子孙孙类 class Foo(): pass class Boo(Foo): p ...
- 面向对象~~类的成员: 私有成员,公有成员, 实例方法, 类方法, 静态方法, 属性(property), isinstance ,issubclass, 元类(type)
一 私有成员公有成员 公有成员: 在任何地方都能访问 私有成员: 只有在类的内部才能访问 类从加载时,只要遇到类中的私有成员,都会在私有成员前面加上_类名 二 实例方法 实例方法就是类的实例能够使用的 ...
- Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass
Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...
- python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass
https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...
- python 全栈开发,Day23(复习,isinstance和issubclass,反射)
一.复习 class A: def func1(self):pass def func2(self): pass def func3(self): pass a = A() b = A() print ...
- day17 isinstance type issubclass 反射
1. issubclass,type,isinstance 1.issubclass 判断xxx是否yyy的子类 例: class Foo: pass class Bar(Foo): pass cla ...
- python基础语法17 面向对象4 多态,抽象类,鸭子类型,绑定方法classmethod与staticmethod,isinstance与issubclass,反射
多态 1.什么是多态? 多态指的是同一种类型的事物,不同的形态. 2.多态的目的: “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字). 多 ...
- 面向对象中特殊方法的补充、isinstance/issubclass/type、方法和函数、反射
一.面向对象中特殊方法的补充 1.__str__ 能将对象名改成你想要的字符串,但是类型还是类 class Foo(object): def __init__(self): pass def func ...
- Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理
上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...
随机推荐
- 143 - ZOJ Monthly, October 2015 I Prime Query 线段树
Prime Query Time Limit: 1 Second Memory Limit: 196608 KB You are given a simple task. Given a s ...
- oc76--NSMutableDictionary
// // main.m // NSMutableDictionary // NSDictionary不可变,初始化后就不可以修改,NSMutableDictionary可变,初始化后可以改变. // ...
- YTU 2760: 字符串---首字母变大写
2760: 字符串---首字母变大写 时间限制: 1 Sec 内存限制: 128 MB 提交: 343 解决: 136 题目描述 输入一行英文句子,将每个单词的第一个字母改成大写字母. 输入 一个 ...
- .NET下WebBrowser的一个BUG以及其替代品——geckofx
今天研究一个小问题,在C#的WebBrowser下打开奇艺网的视频,经常整个FLASH就偏了,进度条控制条什么的都没有. 要全屏一下然后还原才能解决这个问题. 如下,图1为webbrowser打开,图 ...
- 63.ExtJs事件(自定义事件、on、eventManager)示例
转自:https://blog.csdn.net/leadergg/article/details/5927614?utm_source=blogxgwz5 ExtJs事件(自定义事件.on.even ...
- 使用centos 5.x 32位系统安装astgo 2014 v7.0教程(含全套安装文件)
版本特色: 全自动安装 安装过程中不用频繁输入yes或回车 自带完整号码归属地数据库 自带触屏版WAP ·首先确定你需要使用astgo 2014 7.0还是7.3: astgo 2014 v 7.0 ...
- PCB WebAPI跨域访问 实现方式
我们写WebAPI不仅自己系统调用,也需要给其它系统调用,那么如何实现跨域访问了,在这里介绍2种方法实现 方法一.修改Web.Config文件 实现 此方法是全局实现跨域,如果仅想某个方法实现跨域 ...
- Java的安装过程
记录一下自己在Windowns下安装java的过程 安装网址:http://www.oracle.com/index.html 打开网址后要先登录,如果没有号就先注册,然后才能下载 step1:下载J ...
- A. Train and Peter
A. Train and Peter time limit per test 1 second memory limit per test 64 megabytes input standard in ...
- robotframework - 介绍&应用
一.参考简书链接 :https://www.jianshu.com/p/c3a9d20db4e5 二.介绍 Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架, ...