总结:类如果包含了__str__(self) 或者 __repr__,就可以直接被当参数进行传参和调用
repr()和str()方法:作用相同,一种str是客户端显示,一种reor是后台研发调试显示
对于一个对象,python中提供了以上两种字符串的表示,它们的作用和repr()、str()、string.format()大体一致。
如果需要把一个类的实例变成str对象,就需要实现特殊方法str()
-字符串的format()函数也可以使用这些方法,当我们使用{!r}或者{!s}格式时,我们实际上分别调用了repr()或者str()方法。
class student(object):
def __init__(self,name,grade,score):
self.name=name
self.grade=grade
self.score=score
class collegestudent(student):
def _status(self):
return str(self.name),int(self.grade),int(self.score)
a=collegestudent('daxing','3','59')
print a
print str(a)
结果为
<__main__.collegestudent object at 0x0000000002EBCF60>, '<__main__.collegestudent object at 0x0000000002EBCF60>'
返回的是这个类的地址,并不能从中获得有效的东西
我们需要重写默认的repr()和str()
class student(object):
def __init__(self,name,grade,score):
self.name=name
self.grade=grade
self.score=score
def __str__(self):
return '(student: %s, %s, %s)' %(self.name,self.grade,self.score)
#此处student,代表的是一个实例化对象,则参数实际为student的init参数
#正常是K-V格式:先有K(name ,age),实例时再传 V(张三,19)
#而此处是直接K-V作为一个封装完的字典一次传入。其中__str__(self)负责封装字典
class collegestudent(student):
def _status(self):
return str(self.name),int(self.grade),int(self.score)
a=collegestudent('daxing','3','59')
print a
结果为
(student: daxing, 3, 59)
==============================================================
优先执行__str__ ,然后执行repr
class A():
def __str__(self):
return "__str__"
def __repr__(self):
return "__repr__"
a = A()
print(a) ==> __str__