gpt4 book ai didi

python - 为什么下面的代码在循环外给出错误的输出

转载 作者:行者123 更新时间:2023-12-01 00:38:00 24 4
gpt4 key购买 nike

我有下面的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

最佳答案

您正在修改 Cust 类实例,而不是在每个循环中创建它的新实例:

def fetchName(surnames):
custinst=Cust
custinst.name="Gaurav"+surnames
return custinst

这里 Cust 是包含类本身的对象,而不是它的实例。您可以通过在 Inside Loop 之后执行 print(Cust.name) 来验证这一点,这将打印 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)

关于python - 为什么下面的代码在循环外给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57599760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com