python 的print和特殊方法 __str__和__repr__

先提出一个疑问,为什么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

时间: 2024-08-02 03:03:11

python 的print和特殊方法 __str__和__repr__的相关文章

python 的特殊方法 __str__和__repr__

__str__和__repr__ 如果要把一个类的实例变成 str,就需要实现特殊方法__str__(): class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender) 现在,在交互式命令行下用 print 试试: >>>

Python进阶-----通过类的内置方法__str__和__repr__自定制输出(打印)对象时的字符串信息

__str__方法其实是在print()对象时调用,所以可以自己定义str字符串显示信息,在该方法return一个字符串,如果不是字符串则报错print(obj) 等同于-->str(obj) 等同于-->obj.__str__ #未自定__str__信息 class Foo: def __init__(self,name,age): self.name = name self.age = age f = Foo('Menawey',24) print(f) #<__main__.Foo

python中魔法方法__str__与__repr__的区别

提出问题 当我们自定义一个类时,打印这个类对象或者在交互模式下直接输入这个类对象按回车,默认显示出来的信息好像用处不大.如下所示 In [1]: class People: ...: def __init__(self, name, sex): ...: self.name = name ...: self.sex = sex ...: In [2]: p = People('xiaoming', 'male') In [3]: p Out[3]: <__main__.People at 0x7

python类中方法__str__()和__repr__()简单粗暴总结

在交互式模式下,类中同时实现__str__()和__repr__()方法: 直接输入实例名称显示repr返回的类容: 用print打印实例名称显示str返回的内容: >>> class Test: ... def __repr__(self): ... return 'Test -> return repr' ... def __str__(self): ... return 'Test -> return str' ... >>> t = Test() &

python——类的内置方法

双下方法 __str__和__repr__ 改变对象的字符串显示__str__,__repr__ obj.__str__ str(obj)obj.__repr__ repr(obj) class Teacher: def __init__(self,name,salary): self.name = name self.salary = salary def __str__(self): return "Teacher's object :%s"%self.name def __rep

python之反射和内置函数__str__、__repr__

一.反射 反射类中的变量 反射对象中的变量 反射模块中的变量 反射本文件中的变量 1.定义:使用字符串数据类型的变量名 来获取这个变量的值 例如: name = 'xiaoming' print(name) # xiaoming print('name') # name 平时我们要想获取'xiaoming'这个值,要用name去获取,但是如果想用字符串'name' 获取这个值呢, 就需要用到反射. 2.反射应用的场景(就是把接收的字符串转换成变量的名字便于使用) 1,input 用户输入的如果是

python常用数据类型内置方法介绍

熟练掌握python常用数据类型内置方法是每个初学者必须具备的内功. 一.整型 a = 100 a.xxx() class int(object): def bit_length(self): ##如果将某个整数用2进制表示,返回这个2进制所占bit位数. return 0 def conjugate(self, *args, **kwargs): ##共轭复数 @classmethod # known case def from_bytes(cls, bytes, byteorder, *ar

类的专有方法(__str__)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #http://5ydycm.blog.51cto.com/115934/157548/ #http://my.oschina.net/syc2013/blog/335842 #类的专有方法(__str__) #类实例字符串化函数 class Friend(): def __init__(self,name): self.name=name #输出结果:<__main__.Friend instance a

python中 __str__和__repr__

如果要把一个类的实例变成 str,就需要实现特殊方法__str__(): class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender) 现在,在交互式命令行下用 print 试试: 但是,如果直接敲变量 p: 似乎__str__(