python之反射

Posted 十一、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之反射相关的知识,希望对你有一定的参考价值。

1. isinstance, type, issubclass的区别

class Animal:
    def eat(self):
        print("刚睡醒吃点儿东西")

class Cat(Animal):
    def play(self):
        print("猫喜欢玩儿")

c = Cat()
print(isinstance(c, Cat)) # c是一只猫   True
print(isinstance(c, Animal)) # 向上判断 True

a = Animal()
print(isinstance(a, Cat)) # False     不能向下判断 

print(type(a)) # 返回 a的数据类型 <class ‘__main__.Animal‘>
print(type([])) # <class ‘list‘>
print(type(c)) # 精准的告诉你这个对象的数据类型  <class ‘__main__.Cat‘>

# 判断.xx类是否是xxxx类的子类
print(issubclass(Cat, Animal)) # True
print(issubclass(Animal, Cat)) # False

2. 反射

主要是用到了4个函数(  用的最多的就是getattr()和 hasattr()  ):

getattr()   从xxx对象中获取到xxx属性值

hasattr()  判断xxx对象中是否有xxx属性值
delattr()   从xxx对象中删除xxx属性
setattr()  设置xxx对象中的xxx属性为xxxx值

 # 这是master.py中的内容
def chi():
    print(大牛很能吃)
def he():
    print(大牛很能喝 )
def shui():
    print(大牛很能睡 )
def play():
    print(大牛很能玩 )
def work():
    print(大牛很能工作 )
import master  #  引用master.py
print(dir(master))
while 1:
    content = input("请输入要测试的功能:")
    if hasattr(master, content): # 判断xxx对象中是否包含了xxxx
        xx = getattr(master, content) # 从xxx对象中获取到xxx属性值
        xx()
        print(有这个功能)
    else:
        print(没有这个功能)

 



以上是关于python之反射的主要内容,如果未能解决你的问题,请参考以下文章

Python开发第一篇Python基础之反射

第三十四篇 Python面向对象之 反射(自省)

python之异常处理,断言和反射

python中使用反射的方法的代码

python面向对象之反射

Python之面向对象-反射