我有以下基类和子类:
class Event:
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
类的实例,检查一个我知道存在于基类中的字段-我希望它默认为值无
。但是,我的代码引发了以下异常:
AttributeError:“TypeTwoEvent”对象没有属性“foobar”
我的印象是基类字段将被子类继承,创建子类的实例将实例化基类(从而调用其构造函数)...
我在这里错过了什么?为什么TypeTwoEvent
没有fobar
属性-当派生它的基类具有fobar
属性时?
创建实例时,调用其__init__
方法。在这种情况下,即TypeTwoEvent.__init__
。不会自动调用超类方法,因为这会非常混乱。
您应该调用事件__init\uuuu(自我,…) 来自”键入两个事件__init\uuuu(或使用super),但如果您不熟悉它,请先阅读它,以便知道您在做什么)。
您正在覆盖父类的构造函数(__init__
)。要扩展它,您需要使用Super()
调用显式调用父类的构造函数。
class TypeTwoEvent(Event):
def __init__(self, level=None, **kwargs):
# the super call to set the attributes in the parent class
super().__init__(**kwargs)
# now, extend other attributes
self.sr1 = level
self.state = STATE_EVENT_TWO
请注意,super调用并不总是位于子类中的\uu init\uuu方法的顶部。它的位置取决于您的情况和逻辑。
您的子类应该是:
class TypeTwoEvent(Event):
def __init__(self, level=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.sr1 = level
self.state = STATE_EVENT_TWO
因为您重写了\uuu init\uuuu方法,所以如果希望发生父行为,则需要调用父方法。
请记住,
___
不是一个特殊的方法,尽管它的名字很奇怪。这只是创建对象后自动调用的方法。否则,这是一个普通方法,并应用普通继承规则。
super().__init__(arguments, that, goes, to, parents)
是调用方法的父版本的语法。
对于
*args
和
**kwargs
,它只是确保我们捕获传递给
\uu init\uu
的所有附加参数,并将其传递给父方法,因为子方法签名没有这样做,父方法需要这些参数才能工作。
问题内容: 我有以下基类和子类: 在我的代码中,进一步,我正在检查一个类的实例,检查我知道在基类中存在的字段-我希望将其默认为value 。但是,我的代码引发以下异常: AttributeError:“ TypeTwoEvent”对象没有属性“ foobar” 我的印象是,基类字段将由子类继承,并且创建子类的实例将实例化基类(从而调用其构造函数)… 我在这里想念什么?为什么没有一个属性-当其所来源
我一直在努力学习Python(目前的请求和美丽的soup4),我在网上找到了一个教程 问题是我一直得到下面的错误,根本无法弄清楚... 任何帮助都将不胜感激! 回溯(最近一次调用last):文件“C:\Users\BillyBob\Desktop\Web Scrap.py”,第14行,标题=a.string。strip()AttributeError:'NoneType'对象没有属性'strip'
问题内容: 是否有理由要声明类声明object? 我刚刚找到了执行此操作的代码,但找不到很好的理由。 问题答案: 是否有理由要声明类声明object? 在Python 3中,除了Python 2和3之间的兼容性之外,没有任何理由。在Python 2中,原因很多。 Python 2.x故事: 在Python 2.x(从2.2开始)中,有两种类型的类,取决于是否存在object作为基类的类: “经典”
我目前正在构建一个烧瓶应用程序 我能够从下面的stackoverflow留言板上得到这么远,但是我不认为我做对了什么(可能忽略了什么?) 在Flask应用中运行Dash应用 这里的任何帮助都将不胜感激 这是我的服务器。py代码: 这是我的服务器。py:从应用程序导入服务器,应用程序服务器。运行(调试=True) 当我运行这一切时,我得到:
问题内容: 我正在使用python 3.3.3。我正在从tutorialspoint.com做本教程。我无法理解此错误是什么。 这是我的代码: 错误: 问题答案: 您在这里遇到问题有两个原因。第一个是您以只写模式创建的。您需要一个可以读写的文件对象。您还可以使用关键字在完成处理后自动销毁文件对象,而不必担心手动关闭它: 第二个是(就像您非常强烈地指出的错误一样)文件对象(文本文件对象)没有方法。您
问题内容: 我收到一个错误 尝试写入文件时。它是关于编写有关学生分数,他们的姓名,姓氏,班级名称的文件(只需输入班级为),以记录有多少个分数及其分数。仅将其最近的3个分数保存在文件中。我不明白这是什么意思。 这是代码 问题答案: 您的附加代码混合在一起了。该方法在对象上: 请注意,我还将呼叫 移出 了循环。 您不需要在那里使用循环;如果要列出所有行,只需执行以下操作: 要处理文件关闭,请将文件对象