PyGOBject指的是同一个类的实例

时间:2014-12-27 00:17:03

标签: python pygobject gobject

我正在使用PyGOBject为Python3Gtk3绑定创建一个Gstreamer应用程序。我的一个类需要有一个属性,该属性引用类的相同类型(或子类)的实例

from gi.repository import GObject

class Cue(GObject.GObject):
    # ...

    autofollow_target = GObject.Property(type=Cue, default=None)

    # ...

    def __init__(self):
        GObject.GObject.__init__(self)

然而,python解析器为这个特定的代码片段返回以下错误:

NameError: name 'Cue' is not defined

我猜这与python如何创建其类有关,因为我能够创建一个不同自定义类型的属性。

2 个答案:

答案 0 :(得分:0)

在这里,您尝试使用类本身的名称。在Python中,在完全定义/实例化类之前,不知道类的名称。

同样的一种解决方法是在分配属性然后调用此属性方法之前在类中添加它:

@property
def __class_name__(cls):
    return type(cls)

所以你的代码是:

from gi.repository import GObject

class Cue(GObject.GObject):
    # ...

    @property
    def __class_name__(cls):
        return type(cls)

    autofollow_target = GObject.Property(type=__class_name__, default=None)

    # ...

    def __init__(self):
        GObject.GObject.__init__(self)

注意:我没有测试过这个。

希望这很有用。

答案 1 :(得分:0)

诀窍是使用gobject.TYPE_OBJECT或简单object作为类型信息:

from gi.repository import GObject

class Cue(GObject.GObject):
    # ...

    autofollow_target = GObject.Property(type=object)

    # ...

    def __init__(self):
        GObject.GObject.__init__(self)

我还没想出如何指定属性是特定类型的对象,但我认为这可能是绑定本身的问题