相关疑难解决方法(0)

Django Model Mixins:继承自models.Model还是来自对象?

这是一个关于Python Mixins的问题,一般来说可能很有用.我只是使用Django模型,因为这是我最熟悉的用例.

如果mixin继承自该类,它是否设计为与'object'混合使用?

代码示例,更正确或更好,或更好,取决于您想要实现的目标?

这个

class TaggingMixin(models.Model):
    tag = models.ForeignKey(Tag)

    class Meta:
        abstract = True

class MyModel(models.Model, TaggingMixin):
    title = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

或这个:

class TaggingMixin(object):
    tag = models.ForeignKey(Tag)

    class Meta:
        abstract = True

class MyModel(models.Model, TaggingMixin):
    title = models.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)

我认为从对象继承是正确的方法.但我正在网上看到第一个案例的例子......

编辑:我已将我的后续问题转移到一个单独的问题:Django抽象模型与简单Python混合与Python ABCs

python

67
推荐指数
3
解决办法
2万
查看次数

为什么这是一个模棱两可的MRO?

class First(object):
    def __init__(self):
        print "first"

class Second(First):
    def __init__(self):
        print "second"

class Third(First, Second):
    def __init__(self):
        print "third"
Run Code Online (Sandbox Code Playgroud)

资源

为什么Python不能创建一致的MRO?在我看来它非常清楚:

  1. 如果第三个方法不存在,则首先搜索
  2. 如果在First中不存在方法,则在第二个中搜索

但如果你尝试一下:

TypeError: Error when calling the metaclass bases
    Cannot create a consistent method resolution
order (MRO) for bases First, Second
Run Code Online (Sandbox Code Playgroud)

python multiple-inheritance

11
推荐指数
2
解决办法
1241
查看次数

Python - 如何使这个多重继承工作?

我正在开发一个涉及PyQt5的项目,我正在努力管理小部件之间的继承.

我有一个QWidget屏幕继承了QtWidgets.QWidget和另一个由QtDesigner生成的类.它读起来像这样:

class a(QtWidgets.QWidget, Ui_a):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.setupUi(self)

        <some attributes>

    <some functions
Run Code Online (Sandbox Code Playgroud)

在这里,我继承了Ui_a一个存储在生成文件中的单独类,我可以调用setupUi(一种方法Ui_a).

我现在想要创建另一个类b,它也是一个需要显示的QWidget.该类b需要使用类中的一些函数和属性a.我可以轻松地复制粘贴所需的东西,但这是不好的做法,所以我正在寻找一个更整洁的解决方案.如果我做代码:

class b(QtWidgets.QWidget, Ui_b, a):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init(self, parent)
        self.setupUi(self)
Run Code Online (Sandbox Code Playgroud)

然后崩溃并显示一条错误消息,指出它无法创建一致的方法解析顺序.

我的第一个问题是 - 我知道我需要调用类的init方法,a因为a那里创建了属性,但我不知道如何.

我的第二个问题是 - 如何修复此MRO错误并成功创建b可以使用其a属性和函数的新类?

python class pyqt multiple-inheritance

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

标签 统计

python ×3

multiple-inheritance ×2

class ×1

pyqt ×1