• 断点调试,issubclass和ininstance的使用


    一等公民

    只要可以把一个东西赋值给一个变量,这个东西就叫一等公民

    断点调试

    在想要加断点的地方用鼠标点击一下,你会看到一个红色圆圈

    变红的地方,程序执行到,就会暂停

    断电应该加载报错之前

    绿色箭头表示加速跳到下一个断点执行

    控制台报错:点击你能看懂的最后一行,光标会快速定位到错误代码,在错误代码上方加断点,断点调试

    issubclass和isinstance

    issubclass:判断第一个类是不是第二个类的子类,返回true或者false

    issubclass()
    class Foo():
        pass
    class Bar(Foo):
        pass
    class Tt(Bar):
        pass
    print(Bar.__bases__)
    print(issubclass(Bar,Foo))
    print(issubclass(Tt,object))
    

    ininstance:判断第一个参数是不是第二个参数的对象,返回true或者false

    class Foo():
        pass
    class Tt():
        pass
    f=Foo()
    print(isinstance(f,Foo))
    print(isinstance(f,Tt))
    

    反射

    用户输入一段字符串,执行该字符串对应的方法

    hasatter():判断一个属性是否在对象中,返回True或者False

    class People:
        country='China'
        def __init__(self,name):
            self.name=name
    
        def eat(self):
            print('%s is eating'% self.name)
    peo=People('NICK')
    print(hasattr(peo,'eat'))
    

    getattr():通过字符串获取属性或方法,如果获取到了,就会返回相应的属性或方法

    class People:
        country='China'
        def __init__(self,name):
            self.name=name
    
        def eat(self):
            print('%s is eating'% self.name)
    peo=People('NICK')
    print(getattr(peo,'xxxx',None))
    

    setattr():通过字符串来设置属性或方法

    class People:
        country='China'
        def __init__(self,name):
            self.name=name
    
        def eat(self):
            print('%s is eating'% self.name)
    peo=People('NICK')
    setattr(peo,'age',18)
    print(peo.age)
    

    delattr():通过字符串来设置属性或方法

    class People:
        country='China'
        def __init__(self,name):
            self.name=name
    
        def eat(self):
            print('%s is eating'% self.name)
    peo=People('NICK')
    delattr(peo,'name')
    print(peo.__dict__)
    

    内置方法

    _str_:如果不重写__str__ ,print打印出内存地址,如果重写了,会打印出你想要的

    _repr_:跟str类似,在交互式命令下直接写变量名,会执行__repr__

    __setattr__,__delattr__,__getattr__
    点拦截方法
    如果去对象中去属性,一旦取不到,会进入到__getattr__
    如果去对象中赋值属性,一旦取不到,会进入__setattr__
    如果删除对象中的属性,会进入到__delattr__
    

    写一个类继承字典,让它可以.取值,可以中括号取值

    class Mydict(dict):
        def __init__(self,**kwargs):
            super().__init__(**kwargs)
        def__getattr__(self,item):
            return self[item]
        def __setattr__(self,key,value):
            self[key]=value
            
    di=Mydict(name='lzs',age=18)
    print(di['name'])
    print(di.name)
    di.sex='male'
    di['sex']='male'
    

    _item_系列,对象通过[]中括号取值,赋值,删除值的时候会调用

    class Foo:
        def __init__(self,name)
        	self.name=name
        def __getitem_(self,item):
            name=getattr(self,item)
            return name
        def __setitem__(self,key,value):
            print('obj[key]=lzs赋值时,执行我')
            self.__dict__[key]=value
        def __delitem__(self,key):
            print('del obj[key]时,执行我')
            self.__dict__.pop(key)
    f=Foo('lzs')
    print(f['name'])
    

    _call_:对象加括号会调用它

    class Foo():
        def __call__(self):
            print('lllll')
    f=Foo()
    f()
    

    _enter_和__exit__:上下文管理器

    with open() as f:
        pass
    
    class Mydict():
        def__getattr__(self,item):
            print('xxxx')
            return '该属性不存在'
    m=Mydict()
    
    既然选择了远方,只能风雨兼程
  • 相关阅读:
    没有谁是不可取代的
    javascript mvc
    12种JavaScript MVC框架之比较
    windows 下编译libcurl
    PJSIP开发指南-第二章
    URL的字符编码
    unimrcp plugin 分析
    替换unimrcp的VAD模块
    WebRTC的VAD 过程解读
    unimrcp-voice-activity语音检测
  • 原文地址:https://www.cnblogs.com/lzss/p/11511236.html
Copyright © 2020-2023  润新知