• 9.2(day28)断点调试,issubclass,isinstance,反射,内置方法


    断点调试

    一等公民

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

    def test3():

    print('3333')

    def test():

    def test2():

    test3()

    print(i)

    return test2

    print('xxxx')

    print('第一句话')

    test()()

    print('4444')

    断掉调试,在代码前点一下,会有一个红色的小圆圈

    只要不走,代码会一直断在断点处 debug模式运行

    debug检测窗口 console一般的执行窗口

    断点加在报错之前 绿色箭头,快速调到下一个断点

    下箭头不会进去函数内部(单步调试,程序一步一步走),斜箭头会进入函数内部,断点调试不会回头

    运行时报错行数为当时行数

    控制台报错点最后一行,在错误代码上加断点调试

    灰色跳过,卡在红色

    issuFbclass isinstance

    issubclass:判断第一个类是不是第二个类的子类,返回True,False

    class F:

    pass

    class B():

    pass

    class T(B):

    pass

    print(B.bases)

    print(issubclass(B,F))

    print(issubclass(F,B))

    print(issubclass(T,F)) # 子类的子类也可以判断

    isinstance:判断第一个参数是不是第二个参数的对象,返回 True,False

    class F:

    pass

    class T:

    pass

    f = F()

    print(isinstance(f,F))

    print(isinstance(f,T))

    反射:值程序可以访问,检测,修改它本身状态或行为的一种能力

    通过字符串获取删除判断设置属性和方法

    python中简单:通过字符串操作相关属性

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

    hasattr():判断是否在对象中

    getattr();通过字符串获取属性和方法

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

    delattr():通过字符串删除属性或方法

    class F:

    def init(self,name):

    self.name = name

    def run(self):

    print('run')

    def speak(self):

    print('speak')

    p = F('1')

    print(F.dict)

    a = 'name'

    cmd = input('请输入命令')

    方式一

    print(F.dict[cmd])

    F.dictcmd

    if hasattr(p,cmd):

    run = getattr(p,cmd) # 拿到run

    run()

    else:

    print('命令不存在')

    通过用户输入key和value往对象中赋值:

    key = input('请输入key')

    value = input('输入value')

    p.key = value

    setattr(p,key,value)

    print(p.age)

    往对象中加方法属性

    动态往对象中放方法:

    def test(a):

    print(a)

    setattr(p,'test',test)

    print(p.dict)

    p.test(0)

    原始删除属性

    p.name = 'lqz'

    print(p.dict)

    del p.name

    print(p.dict)

    动态删除

    p.name = 'lqz'

    p.sex = 'male'

    a = input('请输入要删除的属性')

    print(p.dict)

    delattr(p,a)

    print(p.dict)p.age = 18

    删除对象中属性为name字符串的属性

    判断一下对象中有没有输入的属性,有的话删除

    p.name = 'lqz'

    p.age = 18

    p.sex = 'male'

    cmd = input('输入要查询的属性')

    if hasattr(p,cmd):

    a = getattr(p,cmd)

    print(a)

    else:

    print('该属性不存在')

    模块也是对象,也可以使用这个四个方法

    使用自己写的模块

    内置方法,__开头的方法

    str 如果不重写__str__ print会打印内存地址

    repr 与__str__相似,用在交互式命令下,直接写变量名,会执行__repr__

    如果重写了,会打印你想要的

    class F:

    # pass
    # def __str__(self):
        # print('xxxxx')
        # return 'xxxxx'
    

    f = F()

    相当于 print(f.str())

    print(f)

    setattr,delattr,getattr

    点拦截方法

    如果去对象中取属性娶不到,会进入__getattr__

    如果去对象中赋值属性,一旦取不到,会进入__setattr__

    如果删除对象中的属性,会进入__delattr__

    class F:

    def init(self,name):

    self.name = name

    # def __ge(x'tattr__(self, item):
    #     print('xxxxx')
    # def __setattr__(self,key,value):
    #     print('yyyyy')
    # def __delattr__(self, item):
    #     print('zzzzz')
    

    f = F('nick')

    print(f.name)

    print(f.dict)

    print(f.name)

    f.sex = 'male'

    del f.name

    之前字典的使用方法

    di = dict(name = 'lqz',age = 18)

    print(di)

    print(di['name'])

    print(di.name)

    写一个类继承字典

    class Mydict(dict):

    def init(self,**kwargs):

    super().init(**kwargs)

    def getattr(self,item):

    # print(item)

    return self[item]

    def setattr(self, key, value):

    self[key] = value

    di = Mydict(name='lqz',age=18)

    # print(di['name'])

    di['sex'] = 'male'

    print(di.sex)

    __item__系列,对象通过[]取值,赋值,删除值,

    __call__对象加括号会调用它

    enterexit

    上下文管理器,本质原理

  • 相关阅读:
    闲聊js中的apply、call和arguments
    字符串操作,文件操作,英文词频统计预处理
    了解大数据的特点、来源与数据呈现方式
    带你精读你不知道的Javasript(上)(一)
    益智小游戏看你能否通关?
    网站性能优化——网页的生成过程
    带着封装的思想顺便实现楼层点亮
    CSS3 傻傻分不清楚的transition, transform 和 animation
    图片轮播的思路
    如何处理跨平台的自适应三
  • 原文地址:https://www.cnblogs.com/jiann/p/11529456.html
Copyright © 2020-2023  润新知