• 面向对象进阶


    一:反射

    1,python面向对象中的反射就是通过字符串的形式操作对象的相关属性。

    2,getattr() 从命名空间中获得这个名字对应的值,找一个属性 ,直接就可以找到这个属性的值,找一个方法 ,找到的是这个方法的内存地址。

    3,hasattr() 判断命名空间里有没有这个名字

    4,正常情况下如果可以拿到这个变量 那么如有有这个变量的字符串形式 就是用反射可以获取到这个值。

    class A:
        role = 'Person'
        def func(self):
            print('*'*self)
    ret = input('>>>')
    print(A.__dict__[ret])
    print(getattr(A,'role'))     
    getattr(A,'func')(1)
    View Code
    class A:
        role = 'Person'
        def func(self):
            print('*'*self)
    
    print(hasattr(A,'r'))
    print(hasattr(A,'role'))
    print(hasattr(A,'func'))
    ret = input('>>>')
    if hasattr(A,ret):
        print(getattr(A,ret))     # getattr从A的命名空间里找一个属性 ,属性不存在会报错
    if hasattr(A,ret):
        func = getattr(A,ret)
        func(1)
    View Code
    class A:
        role = 'Person'
        def __init__(self):
            self.money = 500
        def func(self):
            print('*'*10)
    
    a = A()
    print(a.func)
    getattr(a,'func')()
    print(getattr(a,'money'))
    View Code
    # import time   # 一个py文件就是一个模块
    # time.time()
    # print(time.time())
    # print(getattr(time,'time')())
    
    # import os
    # os.rename('userinfo','user')
    # getattr(os,'rename')('user','user_info')
    模块使用模块中的名字
    def login():
        print('执行login功能')
    
    def register():
        print('执行register功能')
    
    import sys  # 和python解释器相关的内容都在sys里
    print(sys.modules['__main__'])
    func = input('>>>')
    if hasattr(sys.modules['__main__'],func):
        getattr(sys.modules['__main__'],func)()
    从自己所在的模块中使用自己名字
    class A:
        def __init__(self,name):
            self.name = name
    
        def wahaha(self):
            print('wahahahahaha')
    
    a = A('alex')
    #给a对象新增一个属性
    #方法一
    a.age = 18
    print(a.__dict__)
    #方法二
    setattr(a,'age',18)
    print(a.__dict__)
    #给a对象修改一个属性
    setattr(a,'name','egon')
    print(a.__dict__)
    #给a对象删除一个属性
    #方法一
    #del a.age
    #方法二
    #delattr(a,'age')
    增删改对象属性
  • 相关阅读:
    mybatis3.4.3中文文档(.chm文件)
    Castle学习系列之二:Castle配置
    自己写一个jquery
    apply bind call 和 this
    超级无敌海景拽掉咋天的魔方
    小试Dapper
    Linux或Linux虚拟机桥接模式使用Python2认证Drcom
    分治法实现 n皇后问题 Java语言
    分治法实现1-N的数字按字典序全排列组合 Java语言
    Java实现二进制转换16进制(可以去掉空格)
  • 原文地址:https://www.cnblogs.com/leiwei123/p/8877367.html
Copyright © 2020-2023  润新知