python3.6入门到高阶(全栈) day018 反射
分类:
IT文章
•
2022-04-06 13:30:47
今日主要内容
1. issubclass, type, isinstance
issubclass 判断xxx类是否是xxx类的子类
type 获取到xxx对象的类型
isinstance 判断xxx对象是否是xxx类型的(向上判断)
# class Foo(object):
# pass
#
# class Bar(Foo):
# pass
#
# class FooBar(Bar):
# pass
# print(issubclass(Bar, Foo)) # True
# print(issubclass(Foo, Bar)) # False
# print(issubclass(FooBar, Foo)) # True 可以隔代判断
# print(issubclass(Foo, object))
# print(issubclass(Bar, object))
# print(issubclass(FooBar, object))
# object是所有类的根. 面向对象的祖宗
# print(type("你好")) # <class 'str'> 返回该对象的数据类型
# class Animal:
# pass
#
# class Cat(Animal):
# pass
#
# c = Cat()
#
# print(type(c)) # 可以精准的返回数据类型
# 计算a+b的结果 数学运算
# def cul(a, b):
# if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
# return a + b
# else:
# print("不行. 不能帮你计算")
#
# print(cul(10, "瓦罐汤"))
# isinstance 判断xxx对象是否是xxx类型的
# class Animal:
# pass
#
# class Cat(Animal): # x是一种y. x继承y
# pass
#
# class BosiCat(Cat):
# pass
#
# kitty = Cat()
# print(isinstance(kitty, BosiCat)) # True xxx是否是一种xxxx(包括对象的父类)
# # type()
# print(type(kitty) == Animal) # False
View Code
2. 如何判断一个方法或者一个函数(FunctionType, MethodType)
from types import FunctionType, MethodType
print(isinstance(xx, FunctionType))) # 查看判断函数
print(isinstance(xx, MethodType))) # 查看判断方法
from types import FunctionType, MethodType
class Car:
def run(self): # 实例方法
print("我是车, 我会跑")
@staticmethod
def cul():
print("我会计算")
@classmethod
def jump(cls):
print("我会jump")
# 实例方法:
# 1. 用对象.方法 方法
# 2. 类名.方法 函数
c = Car()
# print(isinstance(c.run, FunctionType)) # False
# print(isinstance(Car.run, FunctionType)) # True
# print(isinstance(c.run, MethodType)) # True
# print(isinstance(Car.run, MethodType)) # False
# 静态方法 都是函数
# print(isinstance(c.cul, FunctionType)) # True
# print(isinstance(Car.cul, FunctionType)) # True
# print(isinstance(c.cul, MethodType)) # False
# print(isinstance(Car.cul, MethodType)) # False
# 类方法都是方法
print(isinstance(c.jump, FunctionType)) # False
print(isinstance(Car.jump, FunctionType)) # False
print(isinstance(c.jump, MethodType)) # True
print(isinstance(Car.jump, MethodType)) # True
View Code
例 前段
def chi():
print("大牛很能吃")
def he():
print("大牛很能喝")
def la():
print("大牛很能啦")
def shui():
print("大牛一般不睡觉")
def sa():
print("大牛忘了撒")
def play():
print("大牛很喜欢玩儿")
play()
name = "张二蛋"
print("wife")
后段
# import master
# print(getattr(master, "name"))
# setattr(master, "name", "张全蛋")
# print(master.name)
# setattr(master, "wife", "毛蛋")
# print(master.wife)
# def chi():
# print("大牛说的不对. 应该慢慢吃")
#
# # 给xxx模块中的chi替换成我的chi. 和字典一样
# setattr(master, "chi", chi)
#
# delattr(master, "la") # 动态的删除一些内容
#
# while 1:
# s = input("请输入你要测试的功能") # chi he la sa
#
# # 从模块中获取到chi
# if hasattr(master, s): # name 判断xxx中是否包含xxx功能
# fn = getattr(master, s) # 从xxx中获取到xxx功能
# fn()
# else:
# print("没有这个功能")
# setattr(master, "chi", "馒头")
# print(master.chi)
# setattr(对象, 属性(字符串形式), 值) attribute 属性 对象中的属性
# getattr(对象, 属性(字符串形式) )
# delattr(对象, 属性) 从对象中删除一个属性
# hasattr(对象, 属性) 判断对象中会否有xxx属性
# getattr(master, "name")
# getattr(master, "chi")
# class Car:
# pass
# c = Car()
# print(c.color)
# class Car:
# def __init__(self, color, pai, price):
# self.color = color
# self.pai = pai
# self.price = price
#
# def fly(self):
# print("我的车会飞")
#
# c = Car("黄色", "兰博基尼", 188888)
# # delattr(Car, "fly") # 可以操纵我们的类或者对象
# # c.fly()
#
# # setattr(Car, "fly", lambda self:print("我的天啊. 我的车居然会飞"))
# # c.fly()
#
# print(c.color)
# setattr(c, 'color', "黑色")
# print(c.color)
#
# print(getattr(c, "pai"))
# print(c.pai)