是否可以在屏幕上repr
显示python对象的表示文本时创建一个对象?
>>> select.select([s], [],[])
([<socket._socketobject object at 0x7f274914c600>], [], [])
>>> eval('<socket._socketobject object at 0x7f274914c600>') # Fail
或者一旦将对象表示为stdout,它是否会获得GCd?
没有多大用处,但在使用Python CLI时,它可能偶尔会有所帮助。
答案 0 :(得分:2)
repr
的输出可能能够重建对象,但是约定是,如果它有由尖括号包围的位,则这些位不可重构。
因此,在这种情况下,您无法重建套接字,是的,它将立即被垃圾收集。
答案 1 :(得分:1)
事实并非如此,因为显然文字呈现不一定包含对象的所有信息。
如果你想要类似文本的对象表示,请尝试使用JSON模块。
http://docs.python.org/library/json.html?highlight=json#json
另请注意,此演示文稿中封装的对象不能具有本机对象绑定,如套接字,文件句柄等。
答案 2 :(得分:1)
我们鼓励您创建repr
允许您通过粘贴repr
输出来创建新对象的对象,但不会严格执行。根据对象的性质和任何内部结构,这也可能不容易做到。
有很多方法可以做到这一点。这是一个非常简单的例子:
class ReprObject(object):
def __init__(self, value, item):
self.value = value
self.item = item
def __repr__(self):
return '%s(**%r)' % (self.__class__.__name__, self.__dict__)
然后我们将它带到交互式解释器并创建一个实例:
>>> r = ReprObject(value=1, item=True)
>>> r
ReprObject(**{'item': True, 'value': 1})
现在复制/粘贴repr
并使用它来创建新对象:
>>> r2 = ReprObject(**{'item': True, 'value': 1})
>>> r2
ReprObject(**{'item': True, 'value': 1})
而且eval()
也会有效:
>>> eval(repr(r2))
ReprObject(**{'item': True, 'value': 1})