• 面向对象进阶



    class A: def func1(self):pass #对象与方法之间的绑定 def func4(self):pass #对象与方法之间的绑定 @classmethod def func2(cls):pass #类与方法之间的绑定 @staticmethod def func3():pass

    print(A.func1)
    print(a.func1)

    print(b.func1)

      

    类方法 由于不适用于对象内存空间中的属性,所以不会将对象和方法绑在一起

    而是将类和方法绑在一起

    python处处皆对象

    class B:
        pass
    
    b1 = B()
    b2 = b1
    print(b1)
    

      

    二,内置函数

    class B:pass
    class C(B):pass
    class D(C):pass
    
    print(issubclass(C,D))
    print(issubclass(D,C))
    print(issubclass(B,C))
    print(issubclass(C,B))
    print(issubclass(D,B))
    # issubclass(子类名,父类名) 如果返回True,说明有继承关系

    三,反射
    # role = 123
    # print(eval('role'))
    # class A:
    #     role = 'Person'
    #     def func(self):
    #         print('*'*self)
    # # ret = input('>>>')
    # # print(A.__dict__[ret])
    # # getattr
    # print(getattr(A,'role'))     # 从A的命名空间里找一个属性 ,直接就可以找到这个属性的值
    # f = getattr(A,'func');f(1)   # 从A的命名空间里找一个方法 ,找到的是这个方法的内存地址
    # getattr(A,'func')(1)
    

    反射

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

    使用字符串数据类型的变量名 访问一个命名空间中的名字

    找一个属性,直接就可以找到这个属性的值

    找一个方法,找到的是这个方法的内存地址

    hasattr() 判断一个命名空间中有没有这个名字

    getattr() 从命名空间中获取这个名字对应的值

    类中的反射

      类可以获取类中的属性和方法

    class A:
        role = 'Person'
        def func(self):
            print('*'*self)
    
    print(hasattr(A,'r'))
    print(hasattr(A,'role'))
    print(hasattr(A,'func'))
    

      执行输出:

    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的命名空间里找一个属性 ,属性不存在会报错
    else:
        print('filed')
        
    

    class A:
        role = 'Person'
        def __init__(self):
            self.money = 500
        def func(self):
            print('*'*10)
    
    a = A()
    print(a.func)
    getattr(a,'func')()
    

    import os
    os.rename('userinfo','user')
    getattr(os,'rename')('user','user_info')
    

    # 类使用类命名空间中的名字
    # 对象使用对象能用的方法和属性
    # 模块使用模块中的名字
    # import os ; getattr(os,'rename')('user','user_info')
    # 从自己所在的模块中使用自己名字

    import sys # 和python解释器相关的内容都在sys里
    print(sys.modules['__main__'])
    func = input('>>>')
    if hasattr(sys.modules['__main__'],func):
        getattr(sys.modules['__main__'],func)
    

    类使用命名空间中的名字

      getattr(类名,'名字')

    对象使用对象能用的方法和属性

      getattr(对象名,’名字‘)

    模块使用模块中的名字

      导入模块

      getattr(模块名,'名字')

      import os ; getattr(os,'renama')('user','user_info')

    从自己所在的模块中使用自己名字

      import sys

      getattr(sys.modules['__main__'],名字)

    getattr 一定要和hasattr配合使用

    反射 4个内置函数

    getattr    ******

    hasattr      ******

    setattr  #修改和新建  **

    delattr       #删除一个属性    *

    #增删改   对象属性

    #增删改   对象属性
    class A:
        def __init__(self,name):
            self.name = name
    
        def wahaha(self):
            print('wahahahaha')
    a = A('alex')
    # a.name
    a.wahaha()
    print(a.__dict__)
    setattr(a,'age',18)
    print(a.__dict__)
    

      

    #增删改   对象属性
    class A:
        def __init__(self,name):
            self.name = name
    
        def wahaha(self):
            print('wahahahaha')
    a = A('alex')
    # a.name
    a.wahaha()
    print(a.__dict__)
    setattr(a,'age',18)
    print(a.__dict__)
    setattr(a,'name','egon')   ####给a对象添加一个属性
    print(a.__dict__)
    

      

    #增删改   对象属性
    class A:
        def __init__(self,name):
            self.name = name
    
        def wahaha(self):
            print('wahahahaha')
    a = A('alex')
    # a.name
    a.wahaha()
    print(a.__dict__)
    setattr(a,'age',18)
    print(a.__dict__)
    setattr(a,'name','egon')   ####给a对象添加一个属性
    print(a.__dict__)
    
    #del a.age
    delattr(a,'age')
    print(a.__dict__)
    

      

      

      

     

  • 相关阅读:
    Tomcat起不来的原因
    Memcache和memcached
    charles
    chrome 和 chromeDriver
    解决Establishing SSL connection without server‘s identity verification is not recommended.
    Shiro的认证与授权
    详解 TCP的三次握手四次挥手
    计算机网络-第三章-数据链路层笔记总结
    阿里云高校计划续用考试凉凉
    用管程解决生产者消费者问题
  • 原文地址:https://www.cnblogs.com/haowen980/p/8876415.html
Copyright © 2020-2023  润新知