zoukankan      html  css  js  c++  java
  • 反射

    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
  • 相关阅读:
    机器学习之数据预处理
    使用Python一步一步地来进行数据分析总结
    深入对比数据科学工具箱:Python和R之争
    机器学习算法中的过拟合与欠拟合
    监督学习与无监督学习
    Python数据分析之pandas学习
    Python数据分析之numpy学习
    Dart语言学习(二) Dart的常量和变量
    Dart语言学习(一)为什么学习Dart?
    iOS项目中集成Flutter的最新适配升级
  • 原文地址:https://www.cnblogs.com/jesse-gong/p/7889581.html
Copyright © 2011-2022 走看看