zoukankan      html  css  js  c++  java
  • 贰拾贰

    一、断点调试

    ​ 断点是一个信号,它通知调试器,在某个特定点上暂时将程序执行挂起。当执行在某个断点处挂起时,我们称程序处于中断模式。进入中断模式并不会终止或结束程序的执行。执行可以在任何时候继续。

    ​ 断点提供了一种强大的工具,使您能够在需要的时间和位置挂起执行。与逐句或逐条指令地检查代码不同的是,可以让程序一直执行,直到遇到断点,然后开始调试。这大大地加快了调试过程。没有这个功能,调试大的程序几乎是不可能的。

    使用方法:

    1. 在想要加断点的地方用鼠标点击一下,会变红色程序执行到这,会卡在这(如果是灰色,程序执行到这,不会停止)。
    2. 点击向下的箭头(step over):单步调试(程序一步一步走)。
    3. 左侧有个绿色箭头:快速跳到下一个断点。
    4. 控制台报错时,我们鼠标点击错误信息,会回到错误位置的那一排,如果有改动但并未重新运行时,错误信息现实的还是那一排。断点一般加在最后一排错误信息所标记的位置,或者是上一排。

    二、isinstance和issubclass

    2.1 isinstance

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

    class Foo:
        pass
    class Bar(Foo):
        pass
    
    class Tt(Bar):
        pass
    print(issubclass(Bar,Foo))
    print(issubclass(Foo,Bar))
    
    True
    False
    

    2.2 issubclass

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

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

    三、反射

    ​ 反射就是通过字符串来操作类或者对象的属性。

    ​ 简单来说反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!

    ​ 反射本质就是在使用内置函数,其中反射有以下四个内置函数:

    1. hasattr:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的)。

    2. getattr:根据字符串去获取obj对象里的对应的方法的内存地址,加"()"括号即可执行。

    class Foo(object):
        def __init__(self,name):
            self.name = name
    obj = Foo('xxx')
    #获取变量
    v1 = getattr(obj,'name')
    #获取方法
    method_name = getattr(obj,'login')
    method_name()
    
    1. setattr:这是相对应的getattr()。参数是一个对象,一个字符串和一个任意值。字符串可能会列出一个现有的属性或一个新的属性。这个函数将值赋给属性的。该对象允许它提供。例如,setattr(x,“foobar”,123)相当于x.foobar = 123。

    2. delattr:与setattr()相关的一组函数。参数是由一个对象(记住python中一切皆是对象)和一个字符串组成的。string参数必须是对象属性名之一。该函数删除该obj的一个由string指定的属性。

    r = hasattr(commons, xxx)  # 判断某个函数或者变量是否存在
    print(r)
    
    setattr(commons, 'age', 18)  # 给commons模块增加一个全局变量age = 18,创建成功返回none
    
    setattr(commons, 'age', lambda a: a + 1)  # 给模块添加一个函数
    
    delattr(commons, 'age')  # 删除模块中某个变量或者函数
    

    四、类的内置方法

    4.1 str

    ​ 改变对象的字符串显示。可以理解为使用print函数打印一个对象时,会自动调用对象的__str__方法。

    class Student:
        def __init__(self, name, age):
            self.name = name
            self.age = age
            
        # 定义对象的字符串表示
        def __str__(self):
            return self.name
        
    s1 = Student('张三', 24)
    print(s1)  # 会调用s1的__str__方法
    

    4.2 repr

    ​ 在python解释器环境下,会默认显示对象的repr表示。

    class Student:
        def __init__(self, name, age):
            self.name = name
            self.age = age
            
        # 定义对象的字符串表示
        def __str__(self):
            return self.name
        
    s1 = Student('张三', 24)
    print(s1)  # 会调用s1的__str__方法
    

    4.3 call

    _call_ 方法的执行是由对象后加括号触发的,即:对象()。拥有此方法的对象可以像函数一样被调用。

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def __call__(self, *args, **kwargs):
            print('调用对象的__call__方法')
    
    a = Person('张三', 24)  # 类Person可调用
    a()  # 对象a可以调用
    

    4.4 hasattr,getattr,setattr,delattr

  • 相关阅读:
    Calling Convention的总结
    形参传递关键点
    linux input输入子系统分析《四》:input子系统整体流程全面分析
    22.Linux-块设备驱动之框架详细分析(详解)
    spring: 使用profiles选择数据源(结合嵌入式数据源EmbeddedDatabaseBuilder)
    spring: 使用嵌入式数据源 EmbeddedDatabaseBuilder
    jsp:jstl标签之控制流程
    jsp: jstl标签库
    jsp:tld标签
    spring boot: 组合注解与元注解
  • 原文地址:https://www.cnblogs.com/tangceng/p/11449149.html
Copyright © 2011-2022 走看看