0

午前中のほとんどをこれに費やしましたが、行き詰まっていることを認めなければなりません。

私は、中心的な問題が、関数から呼び出すことができる識別子を持つ多くのオブジェクトを作成することであるというタスクを持っています。- 概念的には、これは SQL ステートメントに似ているはずです

「 id > ある整数すべてのオブジェクトからidを選択;」.

以下のメイン関数には、ID を生成するループが含まれています。次に、範囲変数「i」から取得した ID を使用して、オブジェクトを作成する必要があります。superの使用を見てきましたが、点を結ぶ線が見えません。これについて良いアドバイスはありますか?

class aContainer(self, n):
    def __init__(self, n):
        self.id = n
        #self.contains=[]

class create_object(n):
    # Completely blank 

def main()
    for i in range(10):
        create_object(i) # i is the id-tag of the object.
    # next: print list of object.id's

main()
4

2 に答える 2

0

"Deborah" は、別のフォーラムで次のように問題を解決しました。

ID が一意である場合、id から実際のオブジェクトへのマッピングをディクショナリとして保存すると、高速 (基本的に O(1)) の検索が可能になります。これを外部に (上記のコードのように) 保存することも、インターフェイスの一部としてクラス内に保存することもできます。

>>> class Foo:
    instances = {}
    def __init__(self, id):
        self.id = id
        Foo.instances[id] = self # or self.instances[id], if you prefer

>>> for i in range(6): # Notice range expression used here!
    Foo(i)

<__main__.Foo object at 0x980a40c>
<__main__.Foo object at 0x981c16c>
<__main__.Foo object at 0x980ed6c>
<__main__.Foo object at 0x980eeac>
<__main__.Foo object at 0x9819f4c>
<__main__.Foo object at 0x9819b0c>
>>> Foo.instances
{0: <__main__.Foo object at 0x980a40c>, 1: <__main__.Foo object at 0x981c16c>, 2: <__main__.Foo object at 0x980ed6c>, 3: <__main__.Foo object at 0x980eeac>, 4: <__main__.Foo object at 0x9819f4c>, 5: <__main__.Foo object at 0x9819b0c>}

(そして、ID が新しいことがわかっている場合を除き、Foo(id) を直接呼び出さないことを忘れないでください!)

(これを静的メソッドとして行うこともできますが、それらを宣言する方法については古くなっています...ただし、よりきちんとしたものになります)

最後に、実際の ID 値が何であるかを気にしない場合は、一意であることが保証されている id(self) を使用でき、そもそも ID を渡す必要はありません。

于 2012-07-18T15:50:27.680 に答える
0

なぜこれをしたいのかわからないが...

次のようなものを適応させることができます (not this uses a dictnot a list)...:

from itertools import count
next_id = count(0)

id_to_object = {}

class blah(object):
    pass

for i in xrange(10):
    id_to_object[next(next_id)] = blah()

for i in xrange(25):
    id_to_object[next(next_id)] = blah()

for k, v in id_to_object.iteritems():
    if k > 5:
        print v

またはリストを使用して...、新しいオブジェクトを作成するたびに...

your_list.append(blah())

your_list[5:15]次に、オブジェクトのグループを取得することができます。

于 2012-07-16T11:26:15.827 に答える