一等公民
只要可以把一个东西赋值给一个变量,这个东西就叫一等公民
断点调试
在想要加断点的地方用鼠标点击一下,你会看到一个红色圆圈
变红的地方,程序执行到,就会暂停
断电应该加载报错之前
绿色箭头表示加速跳到下一个断点执行
控制台报错:点击你能看懂的最后一行,光标会快速定位到错误代码,在错误代码上方加断点,断点调试
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()