3

reprPythonオブジェクトが画面に表示されたときに、Pythonオブジェクトの表現されたテキストからオブジェクトを作成することは可能ですか?

>>> select.select([s], [],[])
([<socket._socketobject object at 0x7f274914c600>], [], [])
>>> eval('<socket._socketobject object at 0x7f274914c600>') # Fail

または、オブジェクトがstdoutに表されると、GCdを取得しますか?

あまり役に立ちませんが、Python CLIで遊ぶときに、役立つ場合があります。

4

3 に答える 3

2

の出力はreprオブジェクトを再構築できる場合がありますが、規則では、山かっこで囲まれたビットがある場合、それらのビットは再構築できません。

したがって、この場合、ソケットを再構築することはできません。そうです、すぐにガベージ コレクションが行われます。

于 2012-05-10T18:42:36.137 に答える
1

repr出力を貼り付けて新しいオブジェクトを作成できるオブジェクトを作成することをお勧めしますがrepr、厳密には強制されません。オブジェクトの性質と内部構造によっては、これも簡単に実行できない場合があります。

それを行うには多くの方法があります。1 つの方法の非常に単純な例を次に示します。

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})
于 2012-05-10T18:54:49.703 に答える
1

明らかに、テキスト表示にはオブジェクトのすべての情報が含まれているとは限らないため、そうではありません。

テキストのようなオブジェクト表現が必要な場合は、JSON モジュールを試してください。

http://docs.python.org/library/json.html?highlight=json#json

また、このプレゼンテーションでカプセル化されたオブジェクトは、ソケットやファイル ハンドルなどのネイティブ オブジェクト バインディングを持つことができないことに注意してください。

于 2012-05-10T18:43:17.250 に答える