• 反射


    getattr(object,name,default=None) 
    获取对象object的属性或者方法,如果存在打印出来,如果不存在,打印出默认值,默认值可选。需要注意的是,如果是返回的对象的方法,返回的是方法的内存地址,如果需要运行这个方法,可以在后面添加一对括号。

    hasattr(object,name) 

    其中name为字符串,判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False

    setattr(object,name,value)

    函数对应函数 getatt(),用于设置属性值,该属性必须存在

    delattr(object,name)

    删除一个属性值

     1 def bulk(self):
     2     print("%s你在干嘛呢" %self.name)
     3 
     4 
     5 class dog(object):
     6     def __init__(self,name):
     7         self.name = name
     8 
     9     def eat(self,food):
    10         print("%s is eating..%s" %(self.name,food))
    11 
    12 
    13 d = dog('Djj')
    14 choice = input(">>>").strip()
    15 
    16 if hasattr(d,choice):  #判断对象有eat方法
    17     func = getattr(d,choice) #获取eat方法,存在就打印出方法的内存地址
    18     func('饺子')               #获取eat方法,后面加括号可以将这个方法运行
    19 else:
    20     setattr(d,choice,bulk)  #choice字符串属性不存在时,设置该属性为bulk,简单来说就是choice输入一个不存在的值,给对象d的属性赋值,若属性不存在,先创建再赋值
    21     t = getattr(d,choice)
    22     t(d)

    其实上面的例子就是判断d这个对象里面有没有choice输入的属性,如果有就执行eat打印,如果没有,就执行下面的创建属性,由于你不知道用户输入的是什么变量,在这里不能将setattr里面的name写入固定值,这是就需要用t传入参数,然后再传入对象d的值,后返回bulk

    下面有个说明的例子:

     1 class dog(object):
     2     jineng = '哈沙克'
     3     power = 'less'
     4     def __init__(self,name):
     5         self.name = name
     6     def tell(self):
     7         print("你的名字%s" %self.name)
     8 
     9 d = dog('随便啦')            #将类实例化对象
    10 print(hasattr(d,'jineng'))  #判断对象里面是否有jineng这个属性,OK。返回默认值True,说明有这个属性
    11 print(d.jineng)             #返回这个属性的值哈沙克
    12 setattr(d,'power','Max')    #不管是否有power这个属性,先创建,然后赋值Max
    13 print(d.power)              #返回默认值Max
    14 delattr(d,'power')          #删除一个属性
    15 print(d.power)
    1 显示结果
    2 >>>True
    3 >>>哈沙克
    4 >>>Max
    5 >>>less
  • 相关阅读:
    算法训练 P1103
    算法训练 表达式计算
    算法训练 表达式计算
    基础练习 时间转换
    基础练习 字符串对比
    Codeforces 527D Clique Problem
    Codeforces 527C Glass Carving
    Codeforces 527B Error Correct System
    Codeforces 527A Glass Carving
    Topcoder SRM 655 DIV1 250 CountryGroupHard
  • 原文地址:https://www.cnblogs.com/jesse-gong/p/7889581.html
Copyright © 2020-2023  润新知