<的含义>在Python中

时间:2018-02-01 16:40:17

标签: python flask-sqlalchemy

什么类型的Python数据结构由"< >",就像这样。

[<Board 1>, <Board 2>, <Board 3>]

我在使用Flask-SQLAlchemy库进行Python3时遇到了这个问题。请参阅下面的代码。

class Board(db.Model):

  __tablename__ = 'boards'

  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(256), unique=True, nullable=False)
  description = db.Column(db.String(256))

  def __init__(id, name, description):
    self.id = id
    self.name = name
    self.description = description


tuple_boards = Board.query.all()

print (tuple_boards)
[<Board 1>, <Board 2>, <Board 3>]

2 个答案:

答案 0 :(得分:4)

这不是数据结构。这就是Flask-SQLAlchemy如何将模型实例表示为Model.__repr__的字符串:

class Model(object):
    ...

    def __repr__(self):
        identity = inspect(self).identity
        if identity is None:
            pk = "(transient {0})".format(id(self))
        else:
            pk = ', '.join(to_str(value) for value in identity)
        return '<{0} {1}>'.format(type(self).__name__, pk)

它比默认的object.__repr__更有用:

In [1]: class Thing(object):
  ...       pass
  ...

In [2]: [Thing(), Thing(), Thing()]
Out[2]:
[<__main__.Thing at 0x10c8826a0>,
 <__main__.Thing at 0x10c8820b8>,
 <__main__.Thing at 0x10c8822e8>]

你可以在__repr__中放置任何你想要的东西,但通常最好明确地将你的对象表示为一个字符串:

In [4]: class OtherThing(object):
  ...       def __repr__(self):
  ...           return "I'm an arbitrary string"
  ...

In [5]: [OtherThing(), OtherThing()]
Out[5]: [I'm an arbitrary string, I'm an arbitrary string]

我经常看到用于对象表示的<...>字符串不是有效的Python代码,因为许多其他内置对象'__repr__表示是重构等效对象的有效Python代码

答案 1 :(得分:3)

它不是Python语法,但它是对象的默认字符串表示的一部分,例如。

>>> a = object()
>>> a
<object object at 0x1009d10b0>

在您的情况下,看起来图书馆的实施者也采用了这种惯例。