__boot__ __repr__ __str__ __bytes__
__bool__
内建函数bool(),或者对象放在逻辑表达式的位置,调用这个函数返回布尔值,没有定义__bool__(),就找__len__()返回长度,非0为真,如果__len__()也没有定义,所有实例都返回真
class B:pass
print(bool(B()))
class C:
def __bool__(self):
return False
print(bool(C))
print(bool(C()))
class D:
def __len__(self):
return 0
print(bool(D()))
__repr__
内建函数repre()对一个对象获取字符串表达式,如果一个类定义了__repr__(),但没有定义__str__,那么在请求该类的实例的'非正式'字符串表示时,也将调用__repr__()
__str__
str()函数,内建函数format,print()调用,需要返回字符串表达式
__bytes__ bytes(),返回一个对象的bytes表达式,即返回bytes对象
class Niz:
def __repr__(self):
return str('repr')
def __str__(self):
return str('str')
def __bytes__(self):
return b'zcx'
print(Niz())
b=[Niz(),Niz()]
print(b)
p=str(b) # 对list和Niz()调用str的区别
print(p)
print(*b)
print(list(map(str,b)))
print(bytes(Niz()))
print(Niz().__bytes__())
class B:
def __init__(self):
self.a='a'
self.b="b"
def __repr__(self):
return 'repr: {}, {}'.format(self.a,self.b)
def __str__(self):
return 'str: {}, {}'.format(self.a,self.b)
print(B()) # print调用__str__
print([B()]) # []调用__str__,但list内部调用__repr__
print(([str(B())])) # str()调用__str__
class P:
def __str__(self):
return 'str: {}'.format(self)
def __repr__(self):
return 'repr: {}'.format(888)
p=P()
print([p])