Python __str__(self)和__unicode__(self)

官方文档:https://docs.python.org/2.7/reference/datamodel.html?highlight=__mro__

object.__str__(self)

Called by the str() built-in function and by the print statement to compute the “informal” string representation of an object. This differs from __repr__() in that it does not have to be a valid Python expression: a more convenient or concise representation may be used instead. The return value must be a string object.


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

object.__unicode__(self)

Called to implement unicode() built-in; should return a Unicode object. When this method is not defined, string conversion is attempted, and the result of string conversion is converted to Unicode using the system default encoding.


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

============以下内容翻译自这里==============

__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。Django在许多地方使用str(obj)(或者相关方法,unicode(obj)——见下文),比如说在Django管理站点加载一个对象时显示它的值或者作为对象的显示值插入模板中。因此,我们应该总是返回一个友好的,用户可读的字符串作为对象的__str__。尽管这不是必须的,但还是建议这么做。例如:

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

    def __str__(self):
        # Note use of django.utils.encoding.smart_str() here because
        # first_name and last_name will be unicode strings.
        return smart_str(‘%s %s‘ % (self.first_name, self.last_name)

__unicode__

__unicode__()方法是在一个对象上调用unicode()时被调用的。因为Django的数据库后端会返回Unicode字符串给model属性,所以我们通常会给自己的model写一个__unicode__()方法。前面的例子也可以更简单地写成:

class Person(models.Model):
     first_name = models.CharField(max_length=50)
     last_name = models.CharField(max_length=50)  

     def __unicode__(self):
         return u‘%s %s‘ % (self.first_name, self.last_name)

如果定义了__unicode__()方法但是没有定义__str__()方法,Django会自动提供一个__str__()方法调用__unicode__()方法,然后把结果转换为UTF-8编码的字符串对象。在实际开发中,建议:只定义__unicode__()方法,需要的话让Django来处理字符串对象的转换。

============翻译结束==========================

在Flask里,定义一个Article类的数据模型相应的写法可以写成:

class Article(db.Document):
    Title = db.StringField(max_length=255, required=True)
    SegTitle = db.StringField(max_length=255)
    Url = db.StringField(max_length=255, required=True)
    Id = db.StringField(max_length=255, required=True)
    Summary = db.StringField(max_length=255)
    Content = db.StringField()
    SegContent = db.StringField()
    Tags = db.ListField(db.EmbeddedDocumentField(Tag))
    StrTags = db.ListField(db.StringField(max_length=30))
    LabeledTags = db.ListField(db.StringField(max_length=30))
    CrawledDate = db.DateTimeField()
    PostDate = db.StringField()
    Source = db.StringField()
    OriginalSource = db.StringField()

    @property
    def post_type(self):
        return self.__class__.__name__

    def __unicode__(self):
        return self.Title

    meta = {
        ‘allow_inheritance‘: False
    }
时间: 2024-11-17 10:08:21

Python __str__(self)和__unicode__(self)的相关文章

python __str__ & __repr__ & __cmp__

For ( __str__ ),we going to see a example ... and find who is working for ... #!/usr/bin/python class Person(object): def __init__(self,name,gender): self.name = name self.gender = gender if __name__ == '__main__': p = Person('Frank',23) print p See,

django模型中的__str__()方法和__unicode__()方法

在Django中,如果用的是Python3的话就只能用__str__方法,如果是Python2的话就使用__unicode__方法.因为更安全一些. 作用:没加之前在admin后台看到的是一个对象,加了以后看到的是一个字段的值.如下两个图的区别: 原文地址:https://www.cnblogs.com/pythonchen/p/10116390.html

Python __str__函数

class Cat: def __init__(self,_name): self.name = _name def __str__(self): return "i am %s"%self.name def show(self): print("name is %s"%self.name) tom = Cat("tom") tom.show() print(tom) print("------------"); lanmao

Django学习之manage.py使用

1.django-admin.py startproject mysite 开始一个项目,会初始化一些项目的结构文件 2.python manage.py runserver ip:port 如: python manage.py runserver 127.0.0.1:8080 利用ip可以访问不在同一个主机的数据库 3.python manage.py syncdb 注:会创建在setting.py下配置的INSTALL_APPS下的所有 app,创建其对应的数据表到指定的数据库,但只创建

Django admin的一些有用定制

Model实例,myapp/models.py: from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() # On Python 3: def __str__(self): def __unicode__(self): return self.name class Author(models.Model):

Django1.7学习(二)

7.玩转API 接下来,我们进入 Python 的交互式 shell 中玩转 Django 提供的 API .使用以下命令调用Python shell: python manage.py shell 我们当前使用的环境不同于简单的输入 “python” 进入的 shell 环境, manage.py 文件设置了 DJANGO_SETTINGS_MODULE环境变量,该变量给定了 Django 需要导入的 mysite/settings.py 文件所在路径. 注:如果确实不想使用 manage.p

Django Model数据访问Making queries

创建完Model之后, Django 自动为你提供一套数据库抽象层的API,利用它可以完成创建,提取,更新,删除对象的操作. 以下面的Model为例: class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() # On Python 3: def __str__(self): def __unicode__(self): return self.name class

python27+django1.9添加api

我们进入Python的交互 shell 并使用Django提供的API.要进入Python shell,使用python manage.py shell 使用这个而不是简单的输入"python",是因为 manage.py 会帮你创建项目的环境.“创建项目环境”包括两件事: 把polls添加到sys.path里.为了灵活性,Django中的模块通过加点的路径来引用(例如'polls.models').为了实现这个,polls包必须在sys.path里.我们已经遇到过一个这样的例子了:t

django学习之Model(三)QuerySet

接下来主要学习Models中的Making queries 写好models.py后,django会自动提供一个数据库的抽象API,来实现CRUD(create, retrieve, update, delete).这一部分主要就是怎样去用这些API.在data model reference会有全部的讲解. 接下来都会反复用到下边这个例子,或者在这段代码上进行扩展: from django.db import models class Blog(models.Model): name = mo