反射

--------------每一点滴的进展都是缓慢而艰巨的,一个人一次只能着手解决一项有限的目标。
# ---------------------------------------------------------------------------------#
# 本节主要内容:
# 1. isinstance, type, issubclass
# 2. 区分函数和⽅方法
# 3. 反射(重点)


# 字符串、字节序列:__repr__、__str__、__format__、__bytes__
# 数值转换:__abs__、__bool__、__complex__、__int__、__float__、__hash__、__index__
# 集合模拟:__len__、__getitem__、__setitem__、__delitem__、__contains__
# 迭代枚举:__iter__、__reversed__、__next__
# 可调用模拟:__call__
# 上下文管理:__enter__、__exit__
# 实例创建和销毁:__init__、__new__、__del__
# 属性管理:__getattr__、__getattribute__、__setattr__、__delattr__、__dir__
# 属性描述符:__get__、__set__、__delete__
# 跟类相关的服务:__prepare__、__instancecheck__、__subclasschek__

# []# --------------[type]--------------
# def fun(a,b):
# if (type(a)==int or type(a)==float) and (type(b) == int or type(b)==float):
#
# return a+b
# else:
# print("不能计算")
#
# c = fun("10",20)
# print(c)

# ---------------------------------------------------------------------------------#
# --------------[isinstance]--------------
# class ball:
# pass
#
# class football(ball):
# pass
#
# class socerball(football):
# pass
#
# c = ball()
# c1 = football()
# c2 = socerball()
#
# print(isinstance(c,socerball))
# print(isinstance(c,football))
# print(isinstance(c,ball))

# ---------------------------------------------------------------------------------#
# class Boat:
# def __init__(self,color,pinpai):
# self.color =color
# self.pinpai =pinpai
#
# def run(self):
# print("军舰run")
#
# r = Boat("紫色",'歼击机5230')
# # delattr(Boat,"color")
# # r.run()
#
# # setattr(Boat,"run",lambda self:print("时刻在本战斗!"))
# # r.run()
#
# # print(r.color)
# # setattr(r,"color","金红")
# # print(r.color)
#
# print(getattr(r,'pinpai'))
# print(r.pinpai)

# ---------------------------------------------------------------------------------#
# 1. 看代码写结果并画图表示对象和类的关系积极执行过程

# class StarkConfig(object):
# list_display = []
#
# def get_list_display(self):
# self.list_display.insert(0, 33)
# return self.list_display
#
#
# class RoleConfig(StarkConfig):
# list_display = [11, 22]
#
#
# s1 = StarkConfig()
# s2 = StarkConfig()
#
# result1 = s1.get_list_display()
# print(result1)
# # -- > 33
# result2 = s2.get_list_display()
# print(result2)
# -- > 33

# ---------------------------------------------------------------------------------#
# 2. 看代码写结果并画图表示对象和类的关系积极执行过程


# class StarkConfig(object):
# list_display = []
#
# def get_list_display(self):
# self.list_display.insert(0, 33)
# return self.list_display
#
#
# class RoleConfig(StarkConfig):
# list_display = [11, 22]
#
#
# s1 = StarkConfig()
# s2 = RoleConfig()
#
# result1 = s1.get_list_display()
# print(result1)
# # -- > 33
# result2 = s2.get_list_display()
# print(result2)
# -- > 33 11 22

# ---------------------------------------------------------------------------------#
# 3. 看代码写结果并画图表示对象和类的关系积极执行过程

# class StarkConfig(object):
# list_display = []
#
# def get_list_display(self):
# self.list_display.insert(0, 33)
# return self.list_display
#
#
# class RoleConfig(StarkConfig):
# list_display = [11, 22]
#
#
# s1 = RoleConfig()
# s2 = RoleConfig()
#
# result1 = s1.get_list_display()
# print(result1)
# # -- > 33 11 22
# result2 = s2.get_list_display()
# print(result2)
# -- > 33 11 22

# ---------------------------------------------------------------------------------#
# 4. 看代码写结果

# class Base(object):
# pass
#
# class Foo(Base):
#
# pass
#
# print("issubclass(Base,Foo)") # -- > False


# ---------------------------------------------------------------------------------#
# 5. 看代码写结果
# 如果有以下 handler. py文件,请在run,py中补充代码实现
# 获取 handler中所有成员名称:dir( handler)

#-->['Base', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']

# 获取 handle中名字叫Base的成员


# 检查其他成员是否是Base类的子类(不包含Base),如果是则创建对象并添加到objs列表中

#  handler.py
# class Base(object):
# pass
#
# class F1(Base):
# pass
#
# class F2(Base):
# pass
#
# class F3(F2):
# pass
#
# class F4(Base):
# pass
#
# class F5(object):
# pass
#
# class F6(F5):
# pass
#
# #  run.py
# import handler
#
#
# def func():
# objs = []
#
# name_list = dir(handler)
# print(name_list)
#
#
# if__name__ == '__main__':
#
# func()j
# ---------------------------------------------------------------------------------#
#6. 补充代码
class Foo(object):
def __init__(self,name=None,age=None):
self.name = "小猪佩奇"
self.age = 100
obj = Foo
setattr(obj,"email","xiaozhupeiqi@zhuzhu.com")


#请实现 : 一行代码实现获取obj中所有成员(字典类型)


# ---------------------------------------------------------------------------------#
#7.看代码写结果

class Foo(object):
def __init__(self,name=None,age=None):
self.name = "小猪佩奇"
self.age = 100
obj = Foo
setattr(obj,"email","xiaozhupeiqi@zhuzhu.com")

v1 = getattr(obj,"email")
v2 = getattr(Foo,"email")

print(v1,v2)

# ---------------------------------------------------------------------------------#




























原文地址:https://www.cnblogs.com/dealdwong2018/p/9937755.html