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