zoukankan      html  css  js  c++  java
  • 面向对象进阶

    一:反射

    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')
    增删改对象属性
  • 相关阅读:
    Windows下将ImageMagick移植到Android平台
    【转】对于JNI方法名,数据类型和方法签名的一些认识
    Android中图片占用内存的计算
    Android中Canvas绘图基础详解(附源码下载) (转)
    Android中如何查看内存(下)
    Android中如何查看内存(上)
    WMRouter:美团外卖Android开源路由框架
    写给工程师的十条精进原则
    Flutter的原理及美团的实践
    美团扫码付的前端可用性保障实践
  • 原文地址:https://www.cnblogs.com/leiwei123/p/8877367.html
Copyright © 2011-2022 走看看