为什么我不能创建多个班级实例?

时间:2016-07-04 04:06:47

标签: python class object

当我创建我的类的第一个实例时,它运行得很好。但是当我尝试创建第二个实例时,我得到一个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()

2 个答案:

答案 0 :(得分: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方法并且可以调用,因此您收到错误。

您需要为属性和方法使用单独的名称。我可能会拨打name create_name ...

另一个问题是,您希望使用self.name =代替Settlement.name =,否则您将在所有实例中重复使用相同的名称。

答案 1 :(得分:1)

更新1:问题在于您使用name作为函数和Class变量。将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 函数中的Top和/或实例变量上声明所有类