#反射:通过字符串映射或修改程序运行时的状态、属性、方法。有一下4个方法
def talk(self):
print("%s talk talk talk"%self.name)
def __init__(self,name):
self.name=name
def tell(self):
print("%s tell"%self.name)
A=type("A",(object,),{"__init__":__init__,"tell":tell})#装逼写了一个特殊建类的方法
a=A("gong")
choice=input(">>>>>").strip()#输入字符串,去除左右的空格和/n
#print(hasattr(a,choice))#判断输入的字符串是否有相同的方法名,true/false
if hasattr(A,choice):
getattr(a,choice)()#1.调用方法,如果没有()就是返回的内存地址.
#getattr(a,"name")#2.调用属性,就直接会打印出属性值。注意前面必须是实例名
else:
setattr(a,choice,talk)
f=getattr(a,choice)
f(a)#切记因为定义的一个方法,里没有self,所以要把实例传进去
# setattr(A,"talk1",talk)#如果后面的talk在上面有方法,那么就生成一个方法
# talk(a)#调用方法
# setattr(A,choice,22)#如果找不到方法,就默认为构造函数里的属性,静态属性(如果重复就覆盖,当然这里是不会调用的,因为如果TRUE会直接调用if后面的语句)
# print(getattr(a,choice))#通过键值对方式,得出value
# delattr(a,choice)#删除属性,切记第二个永远是字符串
# a.tell()