我有下面的python代码
class Cust:
def __init__(self):
self.name
surname=["Lai","Sharma","Max"]
def fetchName(surnames):
custinst=Cust
custinst.name="Gaurav"+surnames
return custinst
finalname=[]
print("###inside loop###")
for i in range(len(surname)):
finalname.append(fetchName(surname[i]))
print(finalname[i].name)
print("\n###Outside Loop###\n")
print (finalname[0].name)
print (finalname[1].name)
print (finalname[2].name)
下面是输出
###inside loop###
GauravLai
GauravSharma
GauravMax
###Outside Loop###
GauravMax
GauravMax
GauravMax
问题是为什么所有值都作为最后分配的值(即GauravMax)外循环出现的原因
答案 0 :(得分:2)
您正在修改Cust
类实例,而不是在每个循环中都为其创建新实例:
def fetchName(surnames):
custinst=Cust
custinst.name="Gaurav"+surnames
return custinst
这里Cust
是包含类本身而不是其实例的对象。您可以在print(Cust.name)
之后进行Inside Loop
进行验证,这将打印GauravMax
。
您必须通过调用构造函数来创建新实例:
def fetchName(surnames):
custinst=Cust()
custinst.name="Gaurav"+surnames
return custinst
当前,您的构造函数访问name
属性,但尚未设置,因此将导致错误。您可以避免这种情况,因为它什么也不做:
def Cust():
pass
但是在实例化对象时,请考虑使用构造函数的参数:
def Cust():
def __init__(self, name):
self.name = name
,然后将名称作为参数传递:
def fetchName(surnames):
return Cust("Gaurav"+surnames)