在Python中使用子类时出现NameError

问题描述

我有两个.py文件一个用于main(main.py)模块,另一个包含一个类及其子类(sub.py)。在主文件中,我使用以下类。

## (main.py)
# Import the superclass
from sub import Class1
# Import the subclass
from sub import Class2
# Assign the object (it gives an error as described below)
myVariable=Class2()

我在sub.py中将两个类写为

## (sub.py)
class Class1:
    def __init__(self,nugget=0):
        self.eigval=nugget
        self.eigvec=nugget        
        self.explained=nugget
class Class2(Class1):
    def __init__(self,nugget=0):
        super().__init__(eigval,eigvec,explained)
        self.ppc=nugget
        self.vol=nugget
        self.corr=nugget
        self.cov=nugget

我得到的错误

NameError: name 'eigval' is not defined

尽管我使用子类中的super()继承了变量eigval。 为什么会这样?

解决方法

您无需将nugget以外的任何内容传递给Class2

class Class2(Class1):
    def __init__(self,nugget=0):
        super().__init__(nugget)
        self.ppc=nugget
        self.vol=nugget
        self.corr=nugget
        self.cov=nugget

否则,您是正确的,super().__init__将从__init__调用Class1,因此您的Class2实例将具有eigvaleigvec,和explained个成员。

>>> c = Class2()
>>> c.eigval
0