isinstance(obj,cls) 检查是否obj是否是类 cls 的对象 #对象与类之间的关系
判断第一个参数是否是第二个参数的实例
# 身份运算
# 2 == 3 # 值是否相等
# 2 is 3 # 内存地址是否相等
class A:pass
class B(A):pass
class C(B):pass
c = C()
print(isinstance(c,A)) #True # 包含继承关系的判断
print(type(B) is B) #False
print(type(B) is A) #False # type只关心创建这个对象的类
issubclass(sub, super) 检查sub类是否是 super 类的派生类 #类与类之间的关系
class A:pass class B(A):pass print(issubclass(A,B)) #False print(issubclass(B,A)) #Ture # 第一个参数是疑似子类,第二个参数是疑似父类. # 最终结果如果真的是父子类关系,则返回True
改变对象的字符串显示 __str__,__repr__
自定制格式化字符串 __format__
1 #_*_coding:utf-8_*_ 2 3 format_dict={ 4 ‘nat‘:‘{obj.name}-{obj.addr}-{obj.type}‘,#学校名-学校地址-学校类型 5 ‘tna‘:‘{obj.type}:{obj.name}:{obj.addr}‘,#学校类型:学校名:学校地址 6 ‘tan‘:‘{obj.type}/{obj.addr}/{obj.name}‘,#学校类型/学校地址/学校名 7 } 8 class School: 9 def __init__(self,name,addr,type): 10 self.name=name 11 self.addr=addr 12 self.type=type 13 14 def __repr__(self): 15 return ‘School(%s,%s)‘ %(self.name,self.addr) 16 def __str__(self): 17 return ‘(%s,%s)‘ %(self.name,self.addr) 18 19 def __format__(self, format_spec): 20 # if format_spec 21 if not format_spec or format_spec not in format_dict: 22 format_spec=‘nat‘ 23 fmt=format_dict[format_spec] 24 return fmt.format(obj=self) 25 26 s1=School(‘oldboy1‘,‘北京‘,‘私立‘) 27 print(‘from repr: ‘,repr(s1)) 28 print(‘from str: ‘,str(s1)) 29 print(s1) 30 31 ‘‘‘ 32 str函数或者print函数--->obj.__str__() 33 repr或者交互式解释器--->obj.__repr__() 34 如果__str__没有被定义,那么就会使用__repr__来代替输出 35 注意:这俩方法的返回值必须是字符串,否则抛出异常 36 ‘‘‘ 37 print(format(s1,‘nat‘)) 38 print(format(s1,‘tna‘)) 39 print(format(s1,‘tan‘)) 40 print(format(s1,‘asfdasdffd‘))
1 class B: 2 3 def __str__(self): 4 return ‘str : class B‘ 5 6 def __repr__(self): 7 return ‘repr : class B‘ 8 9 10 b=B() 11 print(‘%s‘%b) 12 print(‘%r‘%b) 13 14 %s和%r