__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])

 

 

posted @ 2020-10-05 17:41  ascertain  阅读(98)  评论(0编辑  收藏  举报