内置方法
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'])