看起来我偶然发现了一个地狱级的地狱,即使我不想和它有任何关系.
我正在使用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:调用元类基类元类冲突时出错:派生类的元类必须是其所有基类的元类的(非严格)子类
澄清:这两个QMainWindow
和QDialog
继承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) 其他问题的答案给人的印象是,事实上这很容易:
但是,我根本无法让它工作.
从示例应用程序的设置,我可以看到Django的allauth理应期待它的模板是account
,openid
和socialaccount
目录.但是当我把模板放在TEMPLATE_DIR/account/signup.html
它没有加载时,signup
视图显示与django-allauth捆绑在一起的模板.我错过了什么?
我在这里玩的包很不为人所知,但问题却很普遍.基本上,我正在尝试使用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) 最近,我开始学习一些Java.从我已经了解到的JVM看起来,JIT使得它在需要CPU周期的操作(即调用方法)上非常快,但也使它对内存感到饥饿.因此,当我需要与以前相同的方法输出相同的输出时,通常更好的方法是将输出存储在变量之前并再次使用它 - 同时将其保存在内存中 - 或者再次调用相同的方法?
在使用元类崩溃之后,我深入研究了Python中元编程的主题,我有几个问题,即imho,在可用的文档中没有明确的答案.
__new__
,并__init__
在元类,它们的参数必须定义相同?__init__
在元类中定义类的最有效方法是什么?