开发者社区> 问答> 正文

python中类继承的类似虚函数的问题--一个开源代码的疑问(补充)?报错

我的上一个问题http://www.oschina.net/question/437227_126231是我看到这个开源的代码模拟的一个小例子,但没有达到同样的效果,而且我好像也没有表达清楚,现在直接引用原来的代码:

有一个player.py(https://github.com/remap/ndnvideo/blob/master/videostreaming/player.py),里面有一个类GstPlayer:

class GstPlayer(gobject.GObject):
	__pipeline = None

	def __init__(self, videowidget, cmd_args):
		self.player = gst.parse_launch(self.__pipeline)
还有一个play.py( https://github.com/remap/ndnvideo/blob/master/videostreaming/play.py),里面GstPlayer类继承了player.py里的GstPlayer类:

class GstPlayer(player.GstPlayer):
	__pipeline = """
		multiqueue name=mqueue use-buffering=true
		identity name=video_input ! ffdec_h264 ! mqueue. mqueue. ! %s \
		identity name=audio_input ! decodebin ! mqueue. mqueue. ! %s
	""" % (utils.video_sink, utils.audio_sink)

当我把play.py中的__pipeline注释掉后,运行报错如下:

Traceback (most recent call last):
  File "./play.py", line 76, in <module>
    sys.exit(main())
  File "./play.py", line 68, in main
    w = player_gui.PlayerWindow(GstPlayer, cmd_args)
  File "/home/kl/ndn/ndnvideo/videostreaming/player_gui.py", line 42, in __init__
    self.player = gst_player(self.videowidget, cmd_args)
  File "/home/kl/ndn/ndnvideo/videostreaming/player.py", line 35, in __init__
    self.player = gst.parse_launch(self.__pipeline)
TypeError: parse_launch() argument 1 must be string, not None
最后一句说明player.py中的GstPlayer类调用parse_launch()函数,self.__pipeline作为参数,但这个self.__pipeline不是player.py中GstPlayer这个父类的__pipeline,而是调用的play.py中GstPlayer这个子类的__pipeline,这不是类似虚函数的效果么?求指导?还有我上一个问题模拟的小例子怎么跑不出这个效果?非常感谢~

展开
收起
爱吃鱼的程序员 2020-06-22 15:40:14 495 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    <spanstyle="font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;line-height:14.65625px;background-color:#FFFFFF;">应该是<spanstyle="font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;line-height:14.65625px;background-color:#FFFFFF;">gobject这个搞出来的回复<aclass='referer'target='_blank'>@socket:原来是类名一样~~我在代码里把self.__pipeline打印出来了,就是子类的__pipeline的字串

    2020-06-22 15:40:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载