文章内容
2023/3/22 12:31:46,作 者: 黄兵
python __repr__ 作用
__repr__ 是Python类中的一个特殊方法,由object对象提供,由于所有类都是object类的子类,所以都会继承该方法。 它是一个”自我描述“ 的方法,此方法通常实现这样的功能: 当直接打印类的实例化对象时,系统将会输出对象的自我描述信息,用来告诉外界对象具有的状态信息。
例如下面有一个 SQLAlchemy 模型的定义:
class User(UserMixin, db.Model): __tablename__ = 'cloud_production_users' id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(64), unique=True, index=True) username = db.Column(db.String(64), unique=True, index=True) role_id = db.Column(db.Integer, db.ForeignKey('cloud_production_roles.id')) password_hash = db.Column(db.String(128)) confirmed = db.Column(db.Boolean, default=False) name = db.Column(db.String(64)) location = db.Column(db.String(64)) about_me = db.Column(db.String(1024, collation='utf8mb4_unicode_ci', ), comment='关于我') member_since = db.Column(db.DateTime(), default=datetime.utcnow) last_seen = db.Column(db.DateTime(), default=datetime.utcnow) avatar_hash = db.Column(db.String(32)) def __repr__(self): return '' % self.username
我们插入数据:
r = Role.query.filter_by(name='User').first() self.assertIsNotNone(r) # add a user u = User(email='john@example.com', password='cat', confirmed=True, role=r)
之后查询,看看结果:
可以看到 User
为 None
,但是我刚才已经增加了用户数据,且通过 Debug,我们也可以看到有用户数据的。
为什么会是 None
呢?
通过通过观察我们发现 username
也为 None
,我们增加 username
的数据,如下:
# add a user u = User(email='john@example.com', password='cat', username='john', confirmed=True, role=r)
之后再次查询,看看结果:
可以看到这里显示了用户名。
通过上面的实验我们可以看出:它是一个”自我描述“ 的方法,在这个实例中它描述了 username
,也就是这一段的内容:
def __repr__(self): return '' % self.username
当直接打印类的实例化对象时,系统将会输出对象的自我描述信息,用来告诉外界对象具有的状态信息。
由于第一次没有设置 username,所以才会导致 User
类显示 None
,同时我们设置了 username 之后,第二次显示的是用户名。
是不是明白了?
黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - python __repr__ 作用
PyCharm 两行合并一行快捷键
400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
评论列表