首页 > 代码库 > Python __str__(self)和__unicode__(self)
Python __str__(self)和__unicode__(self)
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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。