python 内置方法
内置方法
0.format
format_dic= {'自由': '{obj.name}--{obj.where}--{obj.age}', '古风': '{obj.name}/--\{obj.age}/--\{obj.where}', '2b': '{obj.name}+++++{obj.where}+++{obj.age}'} class A: def __init__(self,name,age,where): self.name =name self.age = age self.where = where def __format__(self,format_spec): if not format_spec or format_spec not in format_dic: return format_dic['自由'].format(obj=self) else: return format_dic[format_spec].format(obj=self) a = A('alex',23,'沙河') print(a.__format__('古风')) print(format(a,'2b')) format 只有当类中投这个内置方法才能使用,并且使用的过程中需要传入format_spec的参数, 具体做用鬼知道!!!!!!!!!!!!!!!
1.__str__
__str__,在类中设置的方法,在遇到对该类的对象直接print的情况下后直接寻找类中的__str__,并且寻找__str__的返回值,如果没有则会返回 object中的__str__返回值,空间地址 class A: def __init__(self,name): self.name = name # def __str__(self): # return '23333' a = A('alex') print(a)#<__main__.A object at 0x0000000000DBAD68> object中的__str__返回值 一般的使用范围是在设置一个大类的时候,自定义一个方法的返回值
2.__repr__
__repe__于__str__类似,同样是自定义返回值,并且是他的备胎! 1.在调取__str__的时候优先在方法中寻找__str__数值,找不到则会寻找__repr__ 2.调取__repr__的时候,相当于执行obj.__repr__,寻找__repr__找不到则寻找object中的__repr__方法 class int: # def __str__(self): # return '2' def __repr__(self): return str(1) a = int() b = int() print(repr(a)) print(str(a)) print(repr(b))
3.__call__
__call__是对象名能够如同函数一样被调用, class A: def __init__(self):pass def __call__(self): print('233') a = A() a()
4.__new__
__new__ 构造方法:在实例化之前自定义一个实例化的途径 class A: __Nock = None def __new__(cls, *args, **kwargs): if cls.__Nock is None: obj = object.__new__(cls) cls.__Nock = obj return cls.__Nock def __init__(self,name): self.name = name a = A('alex') b = A('engo') print(a) print(b) #单例模式,使用的是同一个内存空间,最终调取的属性是最后一个对象的属性 print(a.name)#结果engo print(b.name)#结果engo
5.__eq__
__eq__方法:对判断的结果自定义,可以定义比较的方式 class A: pass # def __eq__(self, other): # return True object a = A() b = A() print(a == b) #应为是对象,所以是对象地址与对象地址的不交,不是类的比较 print(A()) func = 2 func2 = 2 print(func == func2) is 比较的地址 == 比较的是数值 在类中 == 比较的是地址
6.__del__
__del__方法:兜底方法,python自动清除之前会执行一次__del__方法 应用范围,需要用到操作系统的地方,空间删除后用过的操作系统的部分方法没有关闭的情况下用__del__方法关闭。 class A: def __init__(self): self.f = open('wen','w') def __del__(self): self.f.close() print('233333') a = A()
7.item
1.getitem
2.setitem
3.delitem
8.item 三种方法: getitem 查找 将对象的属性读取方式改变 setitem 修改增加 将对象的属性修改和增加 delitem 删除 将对象的属性删除 class A: def __init__(self,name): self.name = name def __getitem__(self,key): #转换一种读取方式 return self.__dict__[key] def __setitem__(self, key, value): #对属性进行修改和增加 self.__dict__[key] = value def __delitem__(self, key): #删除属性 del self.__dict__[key] a = A('alex') print(a['name']) a['name'] = 'nihao' print(a['name']) del a['name'] print(a['name'])