-3

私は Python に比較的慣れていないので、名前が関数内で動的に作成されるクラスを作成できるかどうか自問しています。

コード:

def create_dummy_elements():
    rows = [A,B,C,D,E,F,G,H,I]
    columns = [A,B,C,D,E,F,G,H,I]

    for r in range (rows):
        for c in range (columns):
            ***** = element(1,1,1,False)

私の結果は、AA、AB、AC、AD のような名前のクラス「要素」の 81 個のオブジェクトになるはずです ... *私が実際に求めているのは ...

4

3 に答える 3

1

これらのオブジェクトのリストを作成できますが、変数名を動的に作成するのは理想的ではありません。

このようなもの:

my_list_of_elements = []
for r in range (rows):
    for c in range (columns):
        my_list_of_elements.append(element(1,1,1,False))

次に、インデックス番号でそれらにアクセスできます。次に例を示します。my_list_of_elements[n]

または、ループの 2 次元スタイルに一致させるには:

my_list_of_elements = []
for r in range (rows):
    temp = []
    for c in range (columns):
        temp.append(element(1,1,1,False))
    my_list_of_elements.append(temp)

次にmy_list_of_elements[i][j]、i 番目の行と j 番目の列にアクセスすることができます。

文字列インデックスを好む場合は、辞書が役立ちます。

my_dict_of_elements = {}
for r in range (rows):
    for c in range (columns):
        my_dict_of_elements["element"+(r*c+c)] = element(1,1,1,False)

my_dict_of_elements["element0"]たとえば、このようなアクセスが可能になります。

この投稿のatomicinfによるコメントで述べたように、dictを使用できますが、globals()より良いプラクティスがあることに同意しているようです。

于 2013-10-24T21:49:52.167 に答える
0

Python でクラスとクラスの名前付きインスタンスを動的に作成することは可能ですが、そうすることは一般的に嫌われていますそのようなもののコレクションをリストや辞書などの何らかのコンテナーに格納し、必要に応じてインデックスまたはキーでアクセスする方が、より「Pythonic」でエレガントであると考えられています。それがあなたの問題にどのように当てはまるかは次のとおりです。

class Element(object):
    def __init__(self, name, a=None, b=None, c=None):
        self.name, self.a, self.b, self.c = name, a, b, c
    def __str__(self):
        classname = self.__class__.__name__
        return('{classname}('
               'name={self.name}, b={self.a}, '
               'c={self.b}, d={self.c})'.format(classname=classname,
                                                self=self))
board = {}  # empty dictionary
for row in 'ABCDEFGHI':
    for col in 'ABCDEFGHI':
        name = row+col
        board[name] = Element(name)  # assign a named Element instance

# sample usage
board['AB'].a = 42
print board['AB']  # Element(name=AB, a=42, b=None, c=None)
board['GD'].c = 'something'
print board['GD']  # Element(name=GD, a=None, b=None, c=something)

Element注:クラスのほとんどの属性を何と呼ぶべきかよくわかりません。そのため、説明のために上記のab、およびを使用cしています。

于 2013-10-24T23:51:02.590 に答える