day17 Python 反射获取内容和修改内容
""" master.py 模块文件 Name = "fhb" def func1(): print("i am func1") def func2(): print("i am func2") def func3(): print("i am func3") def func4(): print("i am func4") def func5(): print("i am func5") class Car(object): num = 10 def __init__(self, color, price): self.color = color self.price = price def run(self): print("the Car is running!") """ import master # 在导入master模块的时候,修改master模块中的 func1函数内容 def func1(): print("i am new func1") setattr(master, "func1", func1) # setattr不会修改原来master模块的内容,只是导入的时候将master模块所在的内存修改为新的内容 master.func1() # i am new func1 # 在导入master的时候新增一个func6函数 def func6(): print("i am func6") setattr(master, "func6", func6) # 原来master存在func6的时候,则修改加载内存的内容,如果没有则新增此内容。 master.func6() # i am func6 # 在导入master的时候删除func2() delattr(master, "func2") # 在导入master的内存中,删除func2()。 # 修改master中的变量 Name 的值,没有则新增变量 setattr(master, "Name", "王大锤") setattr(master, "Age", "10") print(master.Name) # 王大锤 print(master.Age) # 10 while 1: funcName = input("please input func name which is master func: ") # 判断master这个模块中是否存在某个funcName函数 if hasattr(master, funcName): func = getattr(master, funcName) func() else: print("%s is not exist" % funcName) """ --> result please input func name which is master func: func1 i am func1 please input func name which is master func: func4 i am func4 please input func name which is master func: func6 func6 not exist please input func name which is master func: """ # 对象在内存中只存属性,而类在内存中存的是方法。所以修改属性需要修改对象的属性,修改方法是修改类的方法 # 删除类中的方法 car = master.Car("黑色",10000) car.run() # delattr(master.Car,"run") # car.run() # AttributeError: 'Car' object has no attribute 'run' # 修改对象中的属性 print(car.color) # 黑色 setattr(car,"color","红色") print(car.color) # 红色 # 修改类属性 setattr(master.Car,"num",20) print(master.Car.num) # 20