ʕ·͡ˑ·ཻʔ Daisy 🐾 ◟̆◞̆♥︎
Zou-Wang
点击头像关注

三っ•̀.̫•́)っ 我去宇宙了 ⁽⁽ଘ( ˊᵕˋ )ଓ⁾⁾

断点调试,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()
posted @ 2019-09-12 12:15  没忘  阅读(357)  评论(0编辑  收藏  举报