当前位置: 首页 > 面试题库 >

Python类继承:AttributeError:'[SubClass]'对象没有属性'xxx'

卢聪
2023-03-14
问题内容

我有以下基类和子类:

class Event(object):
    def __init__(self, sr1=None, foobar=None):
        self.sr1 = sr1
        self.foobar = foobar
        self.state = STATE_NON_EVENT

# Event class wrappers to provide syntatic sugar
class TypeTwoEvent(Event):
    def __init__(self, level=None):
        self.sr1 = level
        self.state = STATE_EVENT_TWO

在我的代码中,进一步,我正在检查一个TypeTwoEvent类的实例,检查我知道在基类中存在的字段-我希望将其默认为value
None。但是,我的代码引发以下异常:

AttributeError:“ TypeTwoEvent”对象没有属性“ foobar”

我的印象是,基类字段将由子类继承,并且创建子类的实例将实例化基类(从而调用其构造函数)…

我在这里想念什么?为什么TypeTwoEvent没有一个foobar属性-当其所来源的基本类有一个foobar属性?


问题答案:

您的子类应为:

class TypeTwoEvent(Event):

    def __init__(self, level=None, *args, **kwargs):
        super(TypeTwoEvent, self).__init__(*args, **kwargs)
        self.sr1 = level
        self.state = STATE_EVENT_TWO

因为您覆盖了__init__方法,所以如果您希望发生父行为,则需要调用父方法。

记住,__init__不是一个奇怪的名字的特殊方法。这只是创建对象后自动调用的方法。否则,这是一个普通方法,并且适用普通继承规则。

super(ClassName, self).__init__(arguments, that, goes, to, parents)

是调用方法的父版本的语法。

对于*args**kwargs,它只是确保我们捕获传递给__init__父方法的所有其他参数,因为您的子方法签名没有做到,并且父方法需要这些参数才能工作。



 类似资料:
  • 我有以下基类和子类: 在我的代码中,我正在检查一个类的实例,检查一个我知道存在于基类中的字段-我希望它默认为值。但是,我的代码引发了以下异常: AttributeError:“TypeTwoEvent”对象没有属性“foobar” 我的印象是基类字段将被子类继承,创建子类的实例将实例化基类(从而调用其构造函数)... 我在这里错过了什么?为什么没有属性-当派生它的基类具有属性时?

  • 问题内容: 我正在使用python 3.3.3。我正在从tutorialspoint.com做本教程。我无法理解此错误是什么。 这是我的代码: 错误: 问题答案: 您在这里遇到问题有两个原因。第一个是您以只写模式创建的。您需要一个可以读写的文件对象。您还可以使用关键字在完成处理后自动销毁文件对象,而不必担心手动关闭它: 第二个是(就像您非常强烈地指出的错误一样)文件对象(文本文件对象)没有方法。您

  • 问题内容: 我收到一个错误 尝试写入文件时。它是关于编写有关学生分数,他们的姓名,姓氏,班级名称的文件(只需输入班级为),以记录有多少个分数及其分数。仅将其最近的3个分数保存在文件中。我不明白这是什么意思。 这是代码 问题答案: 您的附加代码混合在一起了。该方法在对象上: 请注意,我还将呼叫 移出 了循环。 您不需要在那里使用循环;如果要列出所有行,只需执行以下操作: 要处理文件关闭,请将文件对象

  • 我一直在努力学习Python(目前的请求和美丽的soup4),我在网上找到了一个教程 问题是我一直得到下面的错误,根本无法弄清楚... 任何帮助都将不胜感激! 回溯(最近一次调用last):文件“C:\Users\BillyBob\Desktop\Web Scrap.py”,第14行,标题=a.string。strip()AttributeError:'NoneType'对象没有属性'strip'

  • 问题内容: 我想转换火花数据框架以使用以下代码添加: 详细的错误消息是: 有人知道我在这里做错了吗?谢谢! 问题答案: 您无法使用数据框,但可以将数据框转换为RDD并通过映射将其映射。在Spark 2.0之前,别名为。使用Spark 2.0,您必须先明确调用。

  • 问题内容: 我如何解决此错误,我是从GitHub下载此代码的。 引发错误 请帮我解决这个问题! 我用了: 我得到这个错误。有人帮我,我只想让它工作为什么这么难? 问题答案: 我怀疑您从中复制代码的地方启用了急切执行功能,即在程序开始时调用了该位置。 您也可以这样做。希望能有所帮助。 更新:请注意,默认情况下,TensorFlow 2.0中启用了急切执行。因此,以上答案仅适用于TensorFlow