python 反射

#反射:通过字符串映射或修改程序运行时的状态、属性、方法。有一下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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值