Inheritance 从psychopy.visual.dotsim继承时发生元类错误
我正试图像这样从visual.dotstin继承一个类Inheritance 从psychopy.visual.dotsim继承时发生元类错误,inheritance,psychopy,Inheritance,Psychopy,我正试图像这样从visual.dotstin继承一个类 class JitterDots(visual.DotStim): ... 我总是遇到臭名昭著的元类错误: TypeError:调用元类基时出错元类冲突:派生类的元类必须是其所有基的元类的(非严格)子类 我知道你可以通过合并所有基类的元类来解决这个问题,但是我看不出dotstin或它的基类在哪里使用元类,所以我真的很困惑 有什么建议吗?这似乎对我有用: from psychopy.visual import dot class Jitt
class JitterDots(visual.DotStim):
...
我总是遇到臭名昭著的元类错误:
TypeError:调用元类基时出错元类冲突:派生类的元类必须是其所有基的元类的(非严格)子类
我知道你可以通过合并所有基类的元类来解决这个问题,但是我看不出dotstin或它的基类在哪里使用元类,所以我真的很困惑
有什么建议吗?这似乎对我有用:
from psychopy.visual import dot
class JitterDots(dot.DotStim):
pass
与您当前的问题无关,但仍然存在一个可能的陷阱:
我还注意到,
dotsim
的一些基/父对象直接从对象继承,但从未通过super()
初始化它们的父对象,尽管dotsim中调用了super()
。然而,根据的说法,“这样做会导致其他类的\uuuuuu init\uuuu
方法不被调用”,这是相对较新的延迟导入可视模块(首次使用时导入,而不是导入可视模块时导入)的结果。这通常在大多数情况下都可以提高性能。因此,在某些基础中缺少对super()
的调用不会被视为错误,而是被故意忽略了?或者你只是指我建议的示例代码及其与Gerrit问题的关系?我认为应该修复对super()缺少的调用,这不是故意的。但我认为Gerrit的问题是由于懒惰导入的新使用。导入visual时,DotStim不会自动导入其名称空间。它只有在实际使用时才导入。谢谢你的澄清。好的,所以我需要显式地“导入psychopy.visual.dot”。谢谢