是否可以将C对象的类更改为python子类?
我使用PyGTK,我有一个ListModel,我已经将自己的类打包了,但是我想将它转换为TreeModelFilter。这些说明告诉我通过以下操作创建它:
class MyListStore(gtk.ListStore):
def __init__(self, title):
self.title = title
liststore = MyListStore(gobject.TYPE_INT, gobject.TYPE_STRING)
modelfilter = liststore.filter_new()
所以我想我可以创造:
^{pr2}$但是我不知道如何使用过滤器来使用我的类,而不是gtk.TreeModelFilter.
继承在python中是一个非常灵活的概念。对于初学者,应该始终使用新样式类。为此,请确保您的类应该始终从“object”继承。在
需要注意的是,类必须从其他类继承,而不是从其他类的实例继承,因此您的示例在那里真的不起作用。事实上,我真的看不出从X或x1继承的区别。在
python中的继承与“方法解析顺序”(methodresolutionorder,MRO)密切相关。您可以使用inspect模块查看对象MRO。在
末尾的元组显示了python尝试解析方法和属性调用的顺序。可以通过修改类的
^{pr2}$__bases__
属性在运行时修改MRO。在如果您的任何类使用多重继承,或者您希望保留继承树的某些部分而不保留其他部分,则这可能会变得复杂。在
处理此问题的最佳方法不是将TreeModel子类化,而是为对象分配一个变量,该对象可以是ListStore或TreeModelFilter。在
我认为这是解决这个问题的最好办法。在
编辑
对于任何感兴趣的人,我发现以下内容有助于避免破坏旧代码。它的行为就像是继承,实际上却没有这样做:
^{pr2}$相关问题 更多 >
编程相关推荐