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 试试:

>>> p = Person(‘Bob‘, ‘male‘)
>>> print p
(Person: Bob, male)
但是,如果直接敲变量 p:

>>> p
<main.Person object at 0x10c941890>
似乎__str__() 不会被调用。

因为 Python 定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。

有一个偷懒的定义__repr__的方法:

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)
    __repr__ = __str__
任务
请给Student 类定义__str__和__repr__方法,使得能打印出<Student: name, gender, score>:

class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score
?不会了怎么办
只要为Students 类加上__str__()和__repr__()方法即可。

参考代码:

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score
    def __str__(self):
        return ‘(Student: %s, %s, %s)‘ % (self.name, self.gender, self.score)
    __repr__ = __str__

s = Student(‘Bob‘, ‘male‘, 88)
print s
时间: 2024-10-24 21:33:21

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

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 的print和特殊方法 __str__和__repr__

先提出一个疑问,为什么print函数可以直接打印参数呢?即使是数字?例如print 1,就会打印1.我们知道1的类型是整型(题外话,在python中1是常量,也是类int的对象,而java中1只是常量),按理说print接受的参数应该是字符串啊? 回答: 因为print函数会首先调用str()函数将参数转化为str类型,而str()函数会调用这个参数所属类中的__str__方法,这个方法定义在object类中.我们知道一切类都是这个object类的子类(在python3中是,即使在定义类的时候没

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__

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

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__(

Python中__str__和__repr__的区别

Python有一个内置的函数叫repr,它能把一个对象用字符串的形式表达出来以便辨认,这就是"字符串表示形式".repr就是通过__repr__这个特殊方法来得到一个对象的字符串表示形式.如果没有实现__repr__,当我们再控制台里打印一个变量的实例时,得到的字符串可能会是<__main__.Object at 0x14af07dbe80>,这个表示的是打印的对象,以及对象的内存地址 现在让我们看看__str__和__repr__这两个方法有什么区别 首先定义一个类 cl

python_魔法方法(三):__str__()和__repr__()

使用python的魔法方法和time模块定制一个计时器的类 1.用time模块里的localtime()方法获取时间2.time.localtime返回struct_time格式3.表现你的类:__str__()和__repr__()先来看下__str__()和__repr__()魔法方法 >>> class A(): def __str__(self): return "我在学习python" >>> a = A() >>> pr

python中__str__与__repr__

(1)背景 python中,对于类(自定义类)的实例对象的默认显示既没有太大用处,也不美观.比如: 1 class adder: 2 def __init__(self,value=0): 3 self.data=value #初始化数据 4 def __add__(self,other): 5 self.data+=other 6>>> x=adder()7>>>print(x) <__main__.adder. object at 0x.....> 8&