1

n個のアイテムを含む文字列my_listのリストがあります。 このリストは、実行時に1つずつ入力された文字列を取得します。今のところ4つのアイテムがあるとしましょう。

例:my_list = ['one'、'two'、'three'、'four']

リスト内のアイテムごとに、 my_objectというカスタムオブジェクトがあり、そのインスタンスをループで作成する必要があります。

私の質問:通常、私はオブジェクトを次のように作成します。my_obj**my_obj** = MyObj()変数を使用してオブジェクトを取得し、そのメソッドを呼び出すことができます。

この作成は、リスト操作を使用して動的に行う必要があるためです。

  • オブジェクトインスタンスを作成するにはどうすればよいですか?
  • オブジェクトインスタンスを取得してそのメソッドを呼び出すにはどうすればよいですか?

私はそれが古く、おそらく間違っていて時代遅れであることを知っていますが、ビジュアルアイテムのVisualBasicではこれは次のように実行された可能性があります:

my_obj [dyanmic_variable]=..。

これがグローバル変数などを含む複雑なものになりたくありません。

この問題をどのように処理できますか?

その他のコンテキスト:

* Qt(PySide-PyQt)を使用してアプリケーションを開発しています。カスタムメイドのウィジェット(my_class)があり、このオブジェクトの動的に作成されたインスタンスをビジュアルリスト(QGridLayout)に入力してから、それらのメソッドを呼び出す必要があります。*

ありがとうございました。

オブジェクトを作成して使用しようとしていることを示すコード:

class my_class(object):
    def __init__(self):
        print 'hi'
    def talk(w):
        print w

my_list = ['one', 'two']

### code that won't work starts from here 
for i in list:
    i = my_class()

my_list[1].talk() 
4

3 に答える 3

3

名前のないオブジェクトのリストを作成したいだけですか? 次のようなことをしてください:

myObjs = [MyObj() for i in range(5)]

myObjs[0]その後、、、myObjs[1]などで各オブジェクトにアクセスできます。

また、 Python チュートリアルを読んで、Pythonでクラス インスタンスやリストなどを作成する基本を理解してください。

編集:コメントで説明すること(特定の名前で変数を作成すること)はお勧めできません。動的変数名を作成しても意味がありません。変数名がわからないとコードで使用できないためです。リストまたは辞書を使用することをお勧めします。dict の場合、次のようなことができます。

myObjs = {}
theName = getNameSomehowFromUser()
myObjs[theName] = MyObj()

そして、それを必要なだけ頻繁に行い、新しいオブジェクトを dict という名前に追加しますmyObjs

于 2012-12-21T20:02:58.873 に答える
1

Python の「変数」と「名前」の意味について混乱していると思います。

オブジェクトには名前がありません。参照カウントを増やす以外foo = 1は、オブジェクトに対して何もしません。1

変数は、名前空間内のオブジェクトへの文字列のマッピングです。名前空間は dict で実装されます。関数を使用して、ローカルの名前空間にアクセスできますlocals()

例:

Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> a = 1
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'a': 1, '__package__': None}
>>> 

'a':1 がlocals()ディクショナリに表示されることに注意してください。

達成したいタスクと行き詰まっている場所を含むコードを表示していないため、質問はまだ不明です。おそらく、あなたがやろうとしていると私が思うことを行うための最良の方法は(あなたがやりたいことをする必要はありませんが)、辞書を使うことです:

>>> class MyClass(object): pass
... 
>>> myobjects = {}
>>> myobjects['key-name'] = MyClass()
>>> myvar = myobjects['key-name']  # some time later...
>>> myvar # what is myvar?
<__main__.MyClass object at 0x10f7c1c50>
>>> myobjects['key-name'] # myobjects['key-name'] is the same object
<__main__.MyClass object at 0x10f7c1c50>
>>> 
于 2012-12-21T20:20:06.917 に答える
0

問題を解決した方法:

新しく作成したすべてのインスタンスを追加する「インスタンス」というクラス プロパティを使用することにしました。これは、辞書またはリストにすることができます。次に、文字列またはインデックス int を使用してそれらを取得できます。

素晴らしい。

于 2012-12-21T20:19:30.033 に答える