• 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。

  • 相关阅读:
    BZOJ 5418: [Noi2018]屠龙勇士 EXCRT+multiset
    CF1033D Divisors Pollard-rho
    BZOJ 3782: 上学路 Lucas+ExCRT+容斥+dp
    BZOJ 1951: [Sdoi2010]古代猪文 ExCRT+欧拉定理+Lucas
    Activiti介绍(一)
    Centos7卸载FastDFS6.1卸载(六)
    FastDFS整合SpringBoot(五)
    FastDFS整合nginx模块报错
    SpringBoot怎么访问html文件
    FastDFS整合普通Maven项目(四)
  • 原文地址:https://www.cnblogs.com/lizheng19822003/p/5262428.html
Copyright © 2020-2023  润新知