小编Red*_*Red的帖子

三重继承导致元类冲突......有时候

看起来我偶然发现了一个地狱级的地狱,即使我不想和它有任何关系.

我正在使用PySide在Qt4中编写应用程序.我想将事件驱动的部分与从Qt Designer文件生成的UI定义分开.因此,我创建了一个"控制器"类,但为了缓解我的生活,无论如何我多次继承它们.一个例子:

class BaseController(QObject):
    def setupEvents(self, parent):
        self.window = parent

class MainController(BaseController):
    pass

class MainWindow(QMainWindow, Ui_MainWindow, MainController):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.setupUi(self)
        self.setupEvents(self)
Run Code Online (Sandbox Code Playgroud)

这按预期工作.它也有继承自(QDialog,Ui_Dialog,BaseController).但是当我BaseController继承并尝试从所述子类继承(代替BaseController)时,我收到一个错误:

TypeError:调用元类基类元类冲突时出错:派生类的元类必须是其所有基类的元类的(非严格)子类

澄清:这两个QMainWindowQDialog继承QObject.BaseController由于Qt事件系统的特殊性,它也必须继承它.Ui_类只继承自简单的Python对象类.我搜索了解决方案,但所有这些都涉及故意使用元类的情况.所以我必须做一些非常错误的事情.

编辑:添加图表可能会更清楚我的描述.

工作范例:

QObject
|      \___________________
|            object        |
QMainWindow     |          BaseController
|      /---Ui_MainWindow   |
|      |                   MainController
MainWindow-----------------/
Run Code Online (Sandbox Code Playgroud)

另一个工作示例:

QObject
|      \___________________
|            object        |
QDialog         |          BaseController
|      /---Ui_OtherWindow  |
|      |                   | …
Run Code Online (Sandbox Code Playgroud)

python oop metaclass qt4 multiple-inheritance

39
推荐指数
2
解决办法
1万
查看次数

如何覆盖django-allauth中的模板?

其他问题的答案给人的印象是,事实上这很容易:

但是,我根本无法让它工作.

示例应用程序的设置,我可以看到Django的allauth理应期待它的模板是account,openidsocialaccount目录.但是当我把模板放在TEMPLATE_DIR/account/signup.html它没有加载时,signup视图显示与django-allauth捆绑在一起的模板.我错过了什么?

python django django-allauth

13
推荐指数
3
解决办法
7591
查看次数

GNU ld找不到那里的库

我在这里玩的包很不为人所知,但问题却很普遍.基本上,我正在尝试使用C++扩展编译Python模块(称为rql).该扩展使用称为gecode的外部框架,其中包含多个库.我编译了gecode并在本地安装.现在,让输出说明一下:

red@devel:~/build/rql-0.23.3$ echo $LD_LIBRARY_PATH
/home/red/usr/lib
red@devel:~/build/rql-0.23.3$ ls $LD_LIBRARY_PATH | grep libgecodeint 
libgecodeint.so
libgecodeint.so.22
libgecodeint.so.22.0
red@devel:~/build/rql-0.23.3$ python setup.py build
running build
running build.py
package init file './test/__init__.py' not found (or not a regular file)
running build_ext
building 'rql_solve' extension
g++ -pthread -shared build/temp.linux-i686-2.5/gecode-solver.o -lgecodeint -lgecodekernel -lgecodesearch -o build/lib.linux-i686-2.5/rql_solve.so
/usr/bin/ld: cannot find -lgecodeint
collect2: ld returned 1 exit status
error: command 'g++' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)

c++ linker shared-libraries ld library-path

8
推荐指数
1
解决办法
8775
查看次数

将值存储为变量还是再次调用方法更好?

最近,我开始学习一些Java.从我已经了解到的JVM看起来,JIT使得它在需要CPU周期的操作(即调用方法)上非常快,但也使它对内存感到饥饿.因此,当我需要与以前相同的方法输出相同的输出时,通常更好的方法是将输出存储在变量之前并再次使用它 - 同时将其保存在内存中 - 或者再次调用相同的方法?

java jit jvm memory-management

7
推荐指数
1
解决办法
5331
查看次数

Python中的元类:需要澄清的几个问题

在使用元类崩溃之后,我深入研究了Python中元编程的主题,我有几个问题,即imho,在可用的文档中没有明确的答案.

  1. 当同时使用__new__,并__init__在元类,它们的参数必须定义相同?
  2. __init__在元类中定义类的最有效方法是什么?
  3. 有没有办法在元类中引用类实例(通常是self)?

python metaprogramming metaclass

5
推荐指数
1
解决办法
557
查看次数