zoukankan      html  css  js  c++  java
  • python第七课 简析反射的使用

    import sys
    import inspect
    class Dog(object): # 类,Cat指向这个类对象
        def __init__(self, name='tom'):
            self.name = name
        def sayHi(self): #  实例方法,sayHi指向这个方法对象,使用类或实例.sayHi访问
            print(self.name, 'says Hi!') # 访问名为name的字段,使用实例.name访问
    
    dog = Dog()
    print(dog.name)
    print(Dog.sayHi) # 使用类名访问实例方法时,方法是未绑定的(unbound)
    print(dog.sayHi) # 使用实例访问实例方法时,方法是绑定的(bound)
    View Code

    我们会碰到这样的需求,需要执行对象的某个方法,或是需要对对象的某个字段赋值,而方法名或是字段名在编码代码时并不能确定,需要通过参数传递字符串的形式输入。

    1.访问对象属性

    dog = Dog('Merry')
    
    print(dog.name) # 访问实例属性
    dog.sayHi() # 调用实例方法
    
    print(dir(dog)) # 获取实例的属性名,以列表形式返回
    if hasattr(dog, 'name'): # 检查实例是否有这个属性
        setattr(dog, 'name', 'tiger') # same as: a.name = 'tiger'
    print(getattr(dog, 'name')) # same as: print a.name
    
    getattr(dog, 'sayHi')() # same as: tiger.sayHi()
    

    执行结果如下:

    dir([obj]): 调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是当前的模块对象。

    hasattr(obj, attr): 这个方法用于检查obj是否有一个名为attr的值的属性,返回一个布尔值。

    getattr(obj, attr): 调用这个方法将返回obj中名为attr值的属性的值,例如如果attr为'bar',则返回obj.bar。

    setattr(obj, attr, val):调用这个方法将给obj的名为attr的值的属性赋值为val。例如如果attr为'bar',则相当于obj.bar = val。

  • 相关阅读:
    python基础---内置类型
    python基础---内置常量
    python基础---内置函数
    数据增强---CutMix
    数据增强---Mixup
    机器学习笔记---评估方法
    深度学习笔记-上溢和下溢
    线性代数笔记-子空间
    tensorflow2学习笔记---模块、层和模型
    tensorflow2学习笔记---Graph和tf.function
  • 原文地址:https://www.cnblogs.com/lizheng19822003/p/5262428.html
Copyright © 2011-2022 走看看