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')
    增删改对象属性
  • 相关阅读:
    (Delphi) Using the Disk Cache 使用磁盘缓存
    当电视沦为“情怀”,5G能不能拯救它?(zz)
    何为优秀的机器学习特征 zz
    BP神经网络算法推导及代码实现笔记zz
    偏差(Bias)和方差(Variance)——机器学习中的模型选择zz
    关于管理,你可能一直有 3 个误解zz
    读《赋能》有感zz
    Concept Drift(概念漂移)
    第四范式涂威威:AutoML技术现状与未来展望
    韩家炜在数据挖掘上开辟的「小路」是什么
  • 原文地址:https://www.cnblogs.com/leiwei123/p/8877367.html
Copyright © 2011-2022 走看看