zoukankan      html  css  js  c++  java
  • Day23

    1、内置函数补充

    isinstance判断一个对象和一个类有没有血缘关系

    class B:pass
    class A(B):pass
    a = A()
    print(isinstance(a,A))
    print(isinstance(a,B))  # 能够检测到继承关系
    print(type(a) is A)
    print(type(a) is B)     # type只单纯的判断类
    View Code

    issubclass(子类名,父类名) 如果返回True 说明有继承关系

    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))
    View Code

    2、反射

    反射
    正常情况下如果可以拿到这个变量 那么如有有这个变量的字符串形式 就是用反射可以获取到这个值
    使用字符串数据类型的变量名 访问一个命名空间中的名字
    找一个属性 ,直接就可以找到这个属性的值
    找一个方法 ,找到的是这个方法的内存地址
    hasattr() 判断一个命名空间中有没有这个名字
    getattr() 从命名空间中获取这个名字对应的值

    反射 4个内置函数
    getattr ******
    hasattr ******
    setattr # 修改和新建 **
    delattr # 删除一个属性 *

    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)
    A.func(1)
    View Code
    # getattr从A的命名空间里找一个属性 ,属性不存在会报错
    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)) 
    if hasattr(A,ret):
        func = getattr(A,ret)
        func(1)

    类使用类命名空间中的名字

    getattr(类名,'名字')

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

    getattr(对象名,'名字')

    模块使用模块中的名字

    导入模块
    getattr(模块名,'名字')

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

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

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

    什么.什么
    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)()
    View Code
    #增删改 对象属性
    class A:
        def __init__(self,name):
            self.name = name
    
        def wahaha(self):
            print('wahahahahaha')
    
    a = A('alex')
    a.name
    a.wahaha()
    getattr(a,'name')
    # a 'age' = 18
    # a.age = 18
    print(a.__dict__)
    setattr(a,'age',18)   # 给a对象新增一个属性
    print(a.__dict__)
    setattr(a,'name','egon')
    print(a.__dict__)
    
    # del a.age
    delattr(a,'age')
    print(a.__dict__)
    View Code
    #增删改 方法
    class A:
        def __init__(self,name):
            self.name = name
    
        def wahaha(self):
            print('wahahahahaha')
    
    def qqxing(self):
        print('qqqqqxing')
    
    a = A('alex')
    # setattr(A,'qqxing',qqxing)
    setattr(a,'qqxing',qqxing)
    # print(a.__dict__)
    a.qqxing(a)
    View Code

    3、内置方法

    class A:
        def __init__(self,name,age,sex,cls):
            self.name = name
            self.age = age
            self.sex = sex
            self.cls = cls
        def __len__(self):
            return len(self.__dict__)
    
    # 有一个内置函数 和内置方法len()是唯一对应的关系
    a1 = A('alex',81,'不详',2)
    a1.hobby = '烫头'
    a2 = A('egon',20,'不详',3)
    a3 = A('yuan',21,'不详',4)
    print(len(a1))
    print(len(a2))
    print(len(a3))
    l = list([1,2,3,4,5])
    print(l)
    print(len(l))
    View Code

    内置的东西

    都和内置的方法有着千丝万缕的联系

    字典的存储

    hash

    class A:
        def __init__(self,name,age,sex,cls):
            self.name = name
            self.age = age
            self.sex = sex
            self.cls = cls
        def __hash__(self):
            return 0
    a1 = A('alex',81,'不详',2)
    print(hash(a1))
    View Code
  • 相关阅读:
    v:bind指令对于传boolean值的注意之处
    vue项目依赖的安装
    直接将文件存放到服务器tomcat中,就可以直接访问文件等
    什么情况下用vue.use方法
    创建Vue项目及其内容分析
    linux安装nginx以及如何启动,暂停,停止操作
    vue项目怎么搭建到云服务器上
    Nginx安装
    UNP学习笔记(第三十章 客户/服务器程序设计范式)
    UNP学习笔记(第二十六章 线程)
  • 原文地址:https://www.cnblogs.com/a352735549/p/8875612.html
Copyright © 2011-2022 走看看