2016-07-04 10 views
0

私は自分のクラスの最初のインスタンスを作成すると完全に動作します。しかし、私が2番目のインスタンスを作成しようとすると、私はTypeErrorを取得します。 'str'オブジェクトは呼び出し可能ではありません。でクラスのインスタンスを複数作成できないのはなぜですか?

class Settlement: 

    def __init__(self): 
     self.name() 
    . 
    . 
    . 
    First_Name = [list items here] 
    Second_Name = [list items here] 
    . 
    . 
    . 
    def name(self): 
     first = Settlement.First_Name[random.randint(0, (len(Settlement.First_Name)-1))] 
     second = Settlement.Second_Name[random.randint(0, (len(Settlement.Second_Name)-1))] 
     Settlement.name = "Name: "+ first+second 


MySettlement = Settlement() 
MySettlement2 = Settlement() 
+4

ことができます1)あなたのインデントを修正し、2)実際にクラスのインスタンスを作成する場所を表示しますか?また、インスタンスレベルの属性を使用していないので、インスタンスはクラスレベルのものを共有します。 –

+1

これは別としてですが、 'random.int'の代わりに' random.choice'を使用してください。 –

+0

1と2ですが、私は最後の部分を理解しているかどうかわかりませんが、それは私の問題の原因かもしれないようですね。 –

答えて

1

更新1:問題は、名前を関数として、クラス変数として使用していることです。 Settlement.nameを他のものに変更してください。

import random 
class Settlement: 

    def __init__(self): 
     self.name() 

    First_Name = ['Romaan', 'test'] 
    Second_Name = ['Shmrd', 'test'] 

    def name(self): 
     first = Settlement.First_Name[random.randint(0, (len(Settlement.First_Name)-1))] 
     second = Settlement.Second_Name[random.randint(0, (len(Settlement.Second_Name)-1))] 
     Settlement.nameeee = "Name: "+ first+second 


MySettlement = Settlement() 
MySettlement2 = Settlement() 

アップデート2: ちょうどあなたが関数名と同じ名前を使用して、このような間違いを避ける確保するために、あなたはのinit機能で、すべてのトップのクラスおよび/またはインスタンス変数を宣言することができます

1

def name(self): 
    first = Settlement.First_Name[random.randint(0, (len(Settlement.First_Name)-1))] 
    second = Settlement.Second_Name[random.randint(0, (len(Settlement.Second_Name)-1))] 
    Settlement.name = "Name: "+ first+second 

あなたはnameというメソッドを持っている - あなたが名前を呼ぶとき - それはSettlement.name = ...で終了 - これは効果的に文字列(例えばするSettlement.nameを再バインド:それはもはやあなたのname方法です呼び出し可能なので)エラーが発生しています。

属性とメソッドに別の名前を使用する必要があります。私はおそらく

他の問題は、あなたがそうでなければ、すべてのインスタンスで同じ名前を再使用している代わりにSettlement.name =self.name =を利用したいということです... namecreate_name呼びたいです。

関連する問題