• python面向对象的反射


    python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)

    getattr # 根据字符串的形式,去对象中找成员。
    hasattr # 根据字符串的形式,去判断对象中是否有成员。
    setattr # 根据字符串的形式,去判断对象动态的设置一个成员(内存)
    delattr # 根据字符串的形式,去判断对象动态的设置一个成员(内存)

    1、对象应用反射
    class Foo:
        def __init__(self):
            self.name = 'egon'
            self.age = 51
        def func(self):
            print('hello')
    egg = Foo()
    
    print(hasattr(egg,'name'))      #先判断name在egg里面存在不存在,结果是True
    print(getattr(egg,'name'))      #如果为True它才去得到,结果是egon
    print(hasattr(egg,'func'))     #结果是True
    print(getattr(egg,'func'))     #得到的是地址<bound method Foo.func of <__main__.Foo object at 0x0000000001DDA2E8>>
    getattr(egg,'func')()        #在这里加括号才能得到,因为func是方法,结果是hello
    
    一般用法如下,先判断是否hasattr,然后取getattr
    if hasattr(egg,'func'):
        getattr(egg,'func')()   #结果是hello
    else:
        print('没找到')

    2、类应用反射

    class Foo:
        f = 123
        @classmethod
        def class_method_dome(cls):
            print('class_method_dome')
        @staticmethod
        def static_method_dome():
            print('static_method_dome')
            
    print(hasattr(Foo,'class_method_dome'))         #结果是True
    method = getattr(Foo,'class_method_dome')
    method()                               #结果是class_method_dome
    
    print(hasattr(Foo,'static_method_dome'))         #结果是True
    method1 = getattr(Foo,'static_method_dome')
    method1()                              #结果是static_method_dome
  • 相关阅读:
    NET与Matlab结合 —— 最小二乘法直线拟合(C#)
    C#基础概念二十五问
    C# where子句
    最小二乘法
    蛙蛙推荐:一套.net窗体身份验证方案(解决了防止用户重复登陆,session超时等问题)
    在 ASP.NET 上实现锁定表头、支持滚动的表格的做法
    一个使用泛型的工厂类
    反射技术与设计模式
    ASP.NET实现匿名访问控制
    危险字符过滤的类
  • 原文地址:https://www.cnblogs.com/feifeifeisir/p/9571923.html
Copyright © 2020-2023  润新知