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

  

posted @ 2018-11-15 21:28  秋风亦冷  阅读(297)  评论(0编辑  收藏  举报