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

Python __str__(self)和__unicode__(self)

时间:2017-04-07 11:12:24      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:container   pytho   cin   mono   print   ber   字符串表   logs   char   

object. __str__ ( self )

通过内嵌方法str()调用,并通过print语句计算对象的“非正式”字符串表示。这跟__repr__()的区别在于,它不需要是一个合法的Python表达式:可以用一种更便捷或简明的表现方式。返回类型必须是一个string对象。

object. __unicode__ ( self )

实现unicode()内嵌函数;应该返回Unicode对象。当没有定义这个方法时,取而代之的是string转换,转换的结果是用系统默认编码转化为Unicode。

具体到Django中,在 Models中定义这个__unicode__(python3为__str__)方法与否,最直接的感受就是你访问admin所看到的内容是否友好。

1
2
3
4
5
6
7
8
9
10
11
class Question(models.Model):
    question_text = models.CharField(‘question text‘, max_length=200)
    pub_date = models.DateTimeField(‘date published‘)
 
    class Meta:
        verbose_name = ‘question‘
        verbose_name_plural = verbose_name
        ordering = [‘-id‘]
 
    def __str__(self):
        return self.question_text

上面的models来自django官方教程,在上面的models中,我定义了一个名为Question的models,此时,访问django的后台admin,看到的内容是这样的
技术分享

可以发现,Question看到的内容就是我们上面返回的self.question_text(如果你返回的是其它数据,则看到结果的会不同),那么,如果此时将上述代码注释掉,也就是变成下面这样,会发生什么呢?

1
2
3
4
5
6
7
8
9
10
11
class Question(models.Model):
    question_text = models.CharField(‘question text‘, max_length=200)
    pub_date = models.DateTimeField(‘date published‘)
 
    class Meta:
        verbose_name = ‘question‘
        verbose_name_plural = verbose_name
        ordering = [‘-id‘]
    #
    # def __str__(self):
    #     return self.question_text

此时,再去后台admin里面查看Question,则变成了这样:

技术分享
在Django中,如果用的是Python3的话就只能用__str__方法,如果是Python2的话就使用__unicode__方法。因为更安全一些。看看文档

技术分享


Python __str__(self)和__unicode__(self)

标签:container   pytho   cin   mono   print   ber   字符串表   logs   char   

原文地址:http://www.cnblogs.com/mjxup/p/a026942a84c806c3ff04b656bdcb2ba5.html

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