事物子功能用f str返回__repr__的目的是什么?

时间:2019-08-25 16:31:07

标签: python flask repr

试图了解子功能中__repr__的用途。调用的类是烧瓶中的db.model,我看不到如何使用此函数及其用途。这是我遇到过https://github.com/CoreyMSchafer/code_snippets/blob/master/Python/Flask_Blog/08-Posts/flaskblog/models.py

的git中心的链接。

此代码在MySQL中为烧瓶网站创建表。

我已经研究了__repr__的用途,但是我仍然不明白它在这种情况下如何工作。

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(120), nullable=False)
    username = db.Column(db.String(120), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(120), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    #posts = db.relationship('Aaa', backref='author', lazy=True)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.image_file}')"

没有错误消息,但我不理解使用该错误消息的上下文。

2 个答案:

答案 0 :(得分:1)

__repr__是一个内置函数,可以在每次调用对象时将其表示为一些预定义的字符串。例如:

class Hi():
    def __init__(self):
        self.greeting = 'Hello how are you'

    def __repr__(self):
        return 'Hi, I am an object who greets'


h = Hi()

print(h)

当我打印h时,它告诉我:

>>>Hi, I am an object who greets

如果您没有__repr__函数,那么:

class Hi():
    def __init__(self):
        self.greeting = 'Hello how are you'


h = Hi()

print(h)

此打印:

>>><__main__.Hi object at 0x102e3e7b8>

它用于调试,因为<__main__.Hi object at 0x102e3e7b8>可能会模棱两可,并且__repr__会消除歧义。

答案 1 :(得分:0)

repr 方法用于获取Python对象的字符串表示形式。在为其烧瓶应用程序创建模型时,通常会发现有人使用它。

使用 repr 方法,您可以从数据库中进行查询并打印查询结果。 repr 方法无需获取查询对象在内存中的位置,而是可以更好地表示结果。

使用您的示例:

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(120), nullable=False)
    username = db.Column(db.String(120), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(120), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    #posts = db.relationship('Aaa', backref='author', lazy=True)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.image_file}')"

如果您的用户具有以下详细信息:

  • id = 1
  • first_name ='比利'
  • 用户名='Bly'
  • 电子邮件='Billyjoe@bj.com'
  • image_file ='default.jpg'
  • 密码='样本'

在打印查询结果时,您将获得:

"User('Bly', 'Billyjoe@bj.com', 'default.jpg')"

上面的结果比看起来更好:

<__main__.User object at 0x7f6882314da0>