我有下面的代码。 Class1将值关联到列表(list1,list2,list3)。在Class2中使用这些列表时,在calc
函数中用作测试的print语句将打印一个空列表'[]',而不是存储在Class1中的列表中的数据。因此计算也将返回一个空值。
class Class2(Class1):
def __init__(self, Class1):
self.arg1 = Class1.arg1
self.arg2 = Class1.arg2
self.arg3 = Class1.arg3
self.arg4 = []
def calc(self, Class1):
for row in Class1.arg1:
self.arg4.append(Class1.list2 + Class1.list3)
print(Class1.arg1)
return self.arg4
cInput = Class1([],[],[])
Test = Class2(cInput ).calc(cInput)
下面是我的Class1以及如何填充列表的示例(Class1正常运行)
class Class1:
def __init__(self, list1, list2, list3):
self.arg1= list1
self.arg2= list2
self.arg3= list3
def getList1(filename1):
with open(filename1, "r") as csv1
csvReader1 = csv.DictReader(csv1)
list1= []
for row in zip(csvReader1):
list1.append((row1["arg1"]))
return list1
答案 0 :(得分:2)
我认为在Python中如何使用继承有些混乱。从类继承时,子类自然可以访问其父类的变量。无需在__init__
函数中手动复制它。您只需通过super()
调用父级的构造函数,然后将其重用于子级即可。
class Class1:
def __init__(self, list1, list2, list3):
self.arg1 = list1
self.arg2 = list2
self.arg3 = list3
class Class2(Class1):
def __init__(self, list1, list2, list3):
super().__init__(list1, list2, list3)
self.arg4 = []
def calc(self):
for row in self.arg1:
self.arg4.append(self.arg2 + self.arg3)
print(self.arg1)
return self.arg4
cInput = Class2([], [], [])
Test = cInput.calc()
我希望代码能消除一些混乱。最后一点:您是否尝试过将getList1
方法设为静态?这样,在声明不带self
关键字的函数时,您将得到一个错误。
答案 1 :(得分:0)
您可以用getList1填充Class1。在您的示例中,您只需使用空列表对其进行初始化。
答案 2 :(得分:0)
因此,您要做的是从文件中获取list1
之后,将其添加到self.arg1
使Class2
继承所有内容,以便您可以直接调用
class Class1:
def __init__(self, list1, list2, list3):
self.arg1= list1
self.arg2= list2
self.arg3= list3
def getList1(self,filename1):
list1 = [1,2,3,4]
self.arg1.extend(list1)
return list1
# another function def getList2(self, filename): ...
# and the last function def getList3(self, filename): ...
class Class2(Class1):
def __init__(self, list1, list2, list3):
super().__init__(list1, list2, list3)
self.arg4 = []
def calc(self):
for row in self.arg1:
self.arg4.append(self.arg2 + self.arg3)
print(self.arg1)
return self.arg4
def populate():
cInput = Class2([], [], [])
list1 = cInput.getList1("filename")
#Do the same with list2 (list2 = cInput.getList2("filename")
#Do the same with list3 (list3 = cInput.getList3("filename")
Test = cInput.calc()
print(Test)
populate()
Class2具有Class1的所有内容,包括getList方法。那么发生的是,当您创建Class2的实例时,它会自动创建Class1的实例并将其添加到Class2(这有意义吗?)
因此,现在,第2类将具有arg1,arg2,arg3和arg4。分别为arg1、2和3调用getList,它们就会被填充。然后,您调用calculate填充arg4。