一、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、反射的更多相关文章

  1. isinstance与issubclass,反射

    目录 isinstance与issubclass isinstance issubclass 反射 定义 反射在模块中的应用 内置方法 isinstance与issubclass isinstance ...

  2. 方法和函数,isinstance/issubclass/type以及反射

    一丶,isinstance/issubclass/type 1.issubclass检查第一个参数是否是第二个参数的 子子孙孙类 class Foo(): pass class Boo(Foo): p ...

  3. 面向对象~~类的成员: 私有成员,公有成员, 实例方法, 类方法, 静态方法, 属性(property), isinstance ,issubclass, 元类(type)

    一 私有成员公有成员 公有成员: 在任何地方都能访问 私有成员: 只有在类的内部才能访问 类从加载时,只要遇到类中的私有成员,都会在私有成员前面加上_类名 二 实例方法 实例方法就是类的实例能够使用的 ...

  4. Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass

    Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...

  5. python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass

    https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...

  6. python 全栈开发,Day23(复习,isinstance和issubclass,反射)

    一.复习 class A: def func1(self):pass def func2(self): pass def func3(self): pass a = A() b = A() print ...

  7. day17 isinstance type issubclass 反射

    1. issubclass,type,isinstance 1.issubclass 判断xxx是否yyy的子类 例: class Foo: pass class Bar(Foo): pass cla ...

  8. python基础语法17 面向对象4 多态,抽象类,鸭子类型,绑定方法classmethod与staticmethod,isinstance与issubclass,反射

    多态 1.什么是多态? 多态指的是同一种类型的事物,不同的形态. 2.多态的目的: “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字). 多 ...

  9. 面向对象中特殊方法的补充、isinstance/issubclass/type、方法和函数、反射

    一.面向对象中特殊方法的补充 1.__str__ 能将对象名改成你想要的字符串,但是类型还是类 class Foo(object): def __init__(self): pass def func ...

  10. Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

随机推荐

  1. LeetCode 929. Unique Email Addresses (独特的电子邮件地址)

    题目标签:String 题目说明 有两个规则针对于 local name. 所以先把local name 和 domain name 分开. 两个规则是: rule 1:'.' 会被去除. (利用re ...

  2. LeetCode 9. Palindrome Number (回文数字)

    Determine whether an integer is a palindrome. Do this without extra space. 题目标签:Math 题目给了我们一个int x, ...

  3. 命令行下mysql的部分操作

    远程链接数据库: mysql –u用户名 [–h主机名或者IP地址] –p密码 (用户名是登录的用 户,主机名或者IP地址为可选项,如果是本地连接则不需要,远程连接需要填写,密码是对应用户的密码.) ...

  4. Modular_exponentiation模幂运算

    https://en.wikipedia.org/wiki/Modular_exponentiation 蒙哥马利(Montgomery)幂模运算是快速计算a^b%k的一种算法,是RSA加密算法的核心 ...

  5. bzoj 2217 Lollipop

    题目大意: 有一个长度为n的序列a1,a2,...,an.其中ai要么是1("W"),要么是2("T") 现在有m个询问,每个询问是询问有没有一个连续的子序列, ...

  6. PCB genesis Slot槽转钻孔(不用G85命令)实现方法

    PCB钻Slot槽一般都采用G85命令钻槽孔,而采用G85命令工程CAM无法准确的知道Slot槽钻多少个孔,并不能决定钻槽孔的顺序,因为采用G85命令钻孔密度与钻槽顺序由钻机本身决定的.在这里介绍一种 ...

  7. hash练习们

    610. 数对的个数 ★★   输入文件:dec.in   输出文件:dec.out   简单对比时间限制:1 s   内存限制:128 MB Description出题是一件痛苦的事情!题目看多了也 ...

  8. Fckeditor使用方法

    下载地址 http://ckeditor.com/download <?php require('../fckeditor/fckeditor.php'); ?> <html> ...

  9. 324 Wiggle Sort II 摆动排序 II

    给定一个无序的数组nums,将它重新排列成nums[0] < nums[1] > nums[2] < nums[3]...的顺序.例子:(1) 给定nums = [1, 5, 1, ...

  10. Spark SQL入门案例之人力资源系统数据处理

    通过该案例,给出一个比较完整的.复杂的数据处理案例,同时给出案例的详细解析. 人力资源系统的管理内容组织结构图 1) 人力资源系统的数据库与表的构建. 2) 人力资源系统的数据的加载. 3) 人力资源 ...