试图了解子功能中__repr__
的用途。调用的类是烧瓶中的db.model,我看不到如何使用此函数及其用途。这是我遇到过https://github.com/CoreyMSchafer/code_snippets/blob/master/Python/Flask_Blog/08-Posts/flaskblog/models.py
此代码在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}')"
没有错误消息,但我不理解使用该错误消息的上下文。
答案 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}')"
如果您的用户具有以下详细信息:
在打印查询结果时,您将获得:
"User('Bly', 'Billyjoe@bj.com', 'default.jpg')"
上面的结果比看起来更好:
<__main__.User object at 0x7f6882314da0>