欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python之反射

程序员文章站 2022-03-24 11:15:23
1. isinstance, type, issubclass的区别 2. 反射 主要是用到了4个函数( 用的最多的就是getattr()和 hasattr() ): getattr() 从xxx对象中获取到xxx属性值 hasattr() 判断xxx对象中是否有xxx属性值 delattr() 从 ......

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('没有这个功能')