thing 子函数用 f str 返回 __repr__ 的目的是什么

What is the purpose of thing sub-function returning __repr__ with f str

试图理解子函数中 __repr__ 的用途。调用的 class 用于 flask 中的 db.model 我看不到这个函数是如何使用的以及它的目的是什么。这是 link 到 git 中心的一个 link,我在其中遇到了这个 https://github.com/CoreyMSchafer/code_snippets/blob/master/Python/Flask_Blog/08-Posts/flaskblog/models.py

此代码在 MySQL 中为 Flask 网站创建 table。

我研究了 __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}')"

没有错误消息,但我不明白使用它的上下文。

__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__ 消除了歧义。

repr 方法用于获取 Python 对象的字符串表示。在为他们的 Flask 应用程序创建模型时,经常会发现人们使用它。

使用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 = 'Billy'
  • 用户名='Bly'
  • 电子邮件 = 'Billyjoe@bj.com'
  • image_file = 'default.jpg'
  • 密码='sample'

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

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

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

<__main__.User object at 0x7f6882314da0>