当我创建我的类的第一个实例时,它运行得很好。但是当我尝试创建第二个实例时,我得到一个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()
答案 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和/或实例变量上声明所有类