1.内置函数补充
1.1 instance(obj,cls)
判断obj是否为cls的实例
class Test: pass p1=Test() print(isinstance(p1,Test))
1.2 issubclass(sub,super)
检查sub是否为super的子类
class Test(object): pass print(issubclass(Test,object))
1.3 getattribute(self,item)
实例在调用方法时,无论是否存在,最首先的就是调用getattribute,除非抛出一个错误,才使用getattr
class Test: name='alex' def __getattr__(self, item): print('this is getattr') def __getattribute__(self, item): print('this is your father') p1=Test() print(p1.name) print(p1.alex)
如果getattribute抛出一个AttributeError,则执行getattr
class Test: name='alex' def __getattr__(self, item): print('this is getattr') def __getattribute__(self, item): # print('this is your father') raise AttributeError p1=Test() print(p1.name) print(p1.__dict__) print(p1.alex)
2. item系列
2.1getitem
和hetattr不同的是,getitem无论是否有这个方法都调用
class Test: def __init__(self,name): self.name=name def __getitem__(self, item): print('this is getitem') # def __getattribute__(self, item): # # print('this is your father') # raise AttributeError p1=Test('alex') print(p1['name']) print(p1['good']) print(p1.__dict__) # print(p1.alex)
2.2 setitem、delitem
和attr相同,只是使用方法不同,使用[]
3. str和repr
作用:
在print的时候,调用str属性,
在print和解释器的时候,调用repr属性
class Foo: def __init__(self,name): self.name=name # def __str__(self):str在print的优先级高于repr # return 'this is %s' %self.name def __repr__(self): return 'good luck' f1=Foo('yehiabin') f1#在解释器中会直接运行repr print(f1)--
good luck
4. 自定义format
#暂停,晚点修改,先睡觉,有点困