转载
python特殊函数 __str__(self)和__repr__(self)
<!--一个博主专栏付费入口结束-->
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d284373521.css">
<div id="content_views" class="markdown_views prism-atom-one-dark">
<!-- flowchart 箭头图标 勿删 -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
</svg>
<p><code>__str__</code>和<code>__repr__</code><br>
如果要把一个类的实例变成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)
- 1
- 2
- 3
- 4
- 5
- 6
现在,在交互式命令行下用 print 试试:
>>> p = Person('Bob', 'male')
>>> print p
(Person: Bob, male)
- 1
- 2
- 3
但是,如果直接敲变量 p:
>>> p
<main.Person object at 0x10c941890>
- 1
- 2
似乎__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__
- 1
- 2
- 3
- 4
- 5
- 6
- 7
任务
请给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
- 1
- 2
- 3
- 4
?不会了怎么办
只要为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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-526ced5128.css" rel="stylesheet">
</div>
</article>
<div class="postTime">
<div class="article-bar-bottom">
<span class="time">
文章最后发布于: 2018-11-26 20:08:39 </span>
</div>
</div>