2011-12-30 5 views
1

"objectname"にオブジェクトの作成時に割り当てられる文字列名が含まれている、以下を試してみてください。変数をオブジェクト名に割り当てるにはどうすればよいですか?

for record in result: 
    objectname = 'Customer' + str(record[0]) 
    print objectname 
    customername = str(record[1]) 
    objectname = Customer(customername) 

お客様はクラスです。

私のテストでは、このループはCustomer1とCustomer2という2つのオブジェクト "CustomerName"を作成しますが、2つのオブジェクトを作成しますが、オブジェクト2(Customer1またはCustomer2) 。

単純に変数内に文字列(customer1,2)を割り当てず、変数名だけを割り当てます。

、事前にあなたの助けに感謝し、私は、オブジェクト名に文字列を代入しようとしたが、それは構文エラーに

を与える確かにこれはすべての時間を行う必要があります。代わりに、あなたはPythonの辞書にあなたのオブジェクトを格納することができ、各顧客のために新しい変数を使用しての

+0

いつも試してみましたが、必要ありません。実際、それを行うのはかなりひどい方法です。ちょうどコレクションを使用してください。 – delnan

+0

サンプルコードのインデントを修正してください。これはPythonで重要なことです。 –

+0

私の初心者のPython知識に関するお返事ありがとうございました。 – user1123221

答えて

3

d = dict() 

for record in result: 
    objectname = 'Customer' + str(record[0]) 
    customername = str(record[1]) 
    d[objectname] = Customer(customername) 

print d 

私はちょうど私の自己足すのを助けるcould'nt辞書に格納されたオブジェクトの例いくつかのコード(私がやるべきこと以上のもの)。中毒性のようです。とにかく、私はこの種の作業にオブジェクトを使用しません。私はおそらくsqliteデータベースを使用します(あなたが必要ならメモリに保存することができます)。あなたが必要なもの

# Initiate customer dictionary 
customers = dict() 

class Customer: 
    def __init__(self, fname, lname): 
     self.fname = fname 
     self.lname = lname 
     self.address = None 
     self.zip = None 
     self.state = None 
     self.city = None 
     self.phone = None 

    def add_address(self, address, zp, state, city): 
     self.address = address 
     self.zip = zp 
     self.state = state 
     self.city = city 

    def add_phone(self, number): 
     self.phone = number 


# Observe that these functions are not belonging to the class.  
def _print_layout(object): 
     print object.fname, object.lname 
     print '===========================' 
     print 'ADDRESS:' 
     print object.address 
     print object.zip 
     print object.state 
     print object.city 
     print '\nPHONE:' 
     print object.phone 
     print '\n' 

def print_customer(customer_name): 
    _print_layout(customers[customer_name]) 

def print_customers(): 
    for customer_name in customers.iterkeys(): 
     _print_layout(customers[customer_name]) 

if __name__ == '__main__': 
    # Add some customers to dictionary: 
    customers['Steve'] = Customer('Steve', 'Jobs') 
    customers['Niclas'] = Customer('Niclas', 'Nilsson') 
    # Add some more data 
    customers['Niclas'].add_address('Some road', '12312', 'WeDon\'tHaveStates', 'Hultsfred') 
    customers['Steve'].add_phone('123-543 234') 

    # Search one customer and print him 
    print 'Here are one customer searched:' 
    print 'ooooooooooooooooooooooooooooooo' 
    print_customer('Niclas') 

    # Print all the customers nicely 
    print '\n\nHere are all customers' 
    print 'oooooooooooooooooooooo' 
    print_customers() 
+0

私と同じソリューションを使用していたRotemは、辞書 - 「顧客」のより良い名前を持っていました。そうでなければ、彼らはかなり同じです:) –

+0

申し訳ありませんが、あなたがあなたのことを書いている間にそれを書いて始めました、それは明らかに同じ答えです。 – Rotem

+0

回答と時間をいただきありがとうございます。私はあなたが辞書を作成しているのを見ることができますが、オブジェクトを辞書に割り当てるように見えますが、辞書に値を入れてオブジェクトに割り当てます。 これは明らかにこれを行う正しい方法ですが、私にとっては直感に反するようです。:S – user1123221

1

辞書です:

customers = {} 
for record in result: 
    objectname = 'Customer' + str(record[0]) 
    customers[customername] = Customer(str(record[1])) #assignment to dictionary 
+0

応答と時間をいただきありがとうございます。私はあなたが辞書を作成しているのを見ることができますが、オブジェクトを辞書に割り当てるように見えます辞書に値を入れ、それをオブジェクトにアサートすることです。これは明らかにこれを行う正しい方法ですが、それは私には直感的ではないようです。:S – user1123221

+0

どのように複雑であるか、直感的ではないかと想像することはできませんが、それぞれ自分自身に... – Rotem

2

それは一般的にその有用ではありませんが、コードのこの作品は、あなたが(たぶん)あなたが顧客データとオブジェクトを保存するために辞書を使用する方法を示して動的に生成された変数名を持つこと。私は間違いなくその代わりニクラス答えのようなものを提案していますが、これはあなたがここに欲しいものを知っている場合は、あなたがそれを行うことができる方法であるでしょう:

for record in result: 
    objectname = 'Customer' + str(record[0]) 
    print objectname 
    customername = str(record[1]) 
    exec '%s = Customer(%r)' % (customername, customername) 

これは変数になりますCustomer1Customer2は、最も内側のスコープに追加されていますそれをあなたが確認customernamevalid Python identifierであることを確認する必要があり、この方法を実行する場合

Customer1 = Customer('Customer1') 
Customer2 = Customer('Customer2') 

:、まさにあなたが次の行を実行した場合などです。

+0

これを助けてくれてありがとう! – user1123221

+0

これは一般的な考えをよりよく理解するのに役立ちます! – user1123221

関連する問題