微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Python中使用子类时出现NameError

如何解决在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。