码迷,mamicode.com
首页 > 编程语言 > 详细

python 的print和特殊方法 __str__和__repr__

时间:2017-11-14 18:37:06      阅读:349      评论:0      收藏:0      [点我收藏+]

标签:obj   turn   pytho   方法   接受   父类   直接   return   elf   

先提出一个疑问,为什么print函数可以直接打印参数呢?即使是数字?例如print 1,就会打印1。我们知道1的类型是整型(题外话,在python中1是常量,也是类int的对象,而java中1只是常量),按理说print接受的参数应该是字符串啊?

回答:

因为print函数会首先调用str()函数将参数转化为str类型,而str()函数会调用这个参数所属类中的__str__方法,这个方法定义在object类中。我们知道一切类都是这个object类的子类(在python3中是,即使在定义类的时候没有显式继承object类,默认也是object的子类。但是在python2中却不是,python2中定义类的时候如果没有继承object,则不是object的子类,在pythn2中这种没继承object的类叫做经典类,而继承了object的类叫做新式类。而python3却都是新式类,因为所有的类都是object的子类),子类继承父类方法,但是我们可以重写这个__str__方法。例如:

class M(type):
def __init__(self):
pass
def __str__(self):
return "gege"
class TM(object):
pass
__metaclass__ = M
print (TM.__class__)
a = M()
print a

 

python 的print和特殊方法 __str__和__repr__

标签:obj   turn   pytho   方法   接受   父类   直接   return   elf   

原文地址:http://www.cnblogs.com/saolv/p/7833706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!