【问题标题】:what is means reconstruct object or recreate object in python?什么是在python中重建对象或重新创建对象?
【发布时间】:2016-10-03 06:58:17
【问题描述】:

我想了解__str____repr__ 之间的区别以及关注Difference between __str__ and __repr__ in Python

在答案中它说__repr__ 的目标是明确的,我很困惑这究竟意味着什么。另一个答案是:__repr__:python 对象的表示通常eval 会将其转换回该对象,所以我读过eval 函数让执行其中的python 代码。

谁能用简单的语言解释一下这些术语:

  • 什么是对象重建?
  • 什么是__repr__
  • eval__repr__之间有什么联系?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    也许一个简单的例子可以帮助澄清:

    class Object:
    
        def __init__(self, a, b):
            self.a = a
            self.b = b
    
        def __repr__(self):
            return 'Object({0.a!r}, {0.b!r})'.format(self)
    

    这个对象有两个在__init__中定义的参数和一个合理的__repr__方法。

    >>> o = Object(1, 2)
    >>> repr(o)
    'Object(1, 2)'
    

    请注意,我们对象的__repr__ 现在看起来与我们开始创建它的方式完全相同;它是提供相同值的合法 Python 代码。正如data model documentation 所说:

    如果可能的话,[__repr__] 应该看起来像一个有效的 Python 可用于重新创建具有相同对象的表达式 值(给定适当的环境)。

    这就是eval 的用武之地:

    >>> x = eval(repr(o))
    >>> x.a
    1
    >>> x.b
    2
    

    因为表示是 Python 代码,我们可以evalulate 它并获取具有相同值的对象。这是“重建”原始对象o

    但是,正如 cmets 中所指出的,这只是一个说明,并不意味着您在尝试创建 x 的副本时应该依赖 repr(eval(x))

    【讨论】:

    • 请注意“这是您通常会如何写 repr(..) 如果写一个绝对不是应该如何使用 repr(..)eval”。我记得有人用这个组合来克隆对象..
    猜你喜欢
    • 2015-04-02
    • 2012-07-15
    • 2017-04-12
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 2012-03-08
    • 2017-04-23
    • 1970-01-01
    相关资源
    最近更新 更多