Python继承,不返回新类

问题描述 投票:0回答:1

我无法理解为什么继承在以下示例中不起作用:

import vlc

class CustomMediaPlayer(vlc.MediaPlayer):

    def __init__(self, *args):
        super().__init__(*args)

    def custom_method(self):
        print("EUREKA")

custom_mp = CustomMediaPlayer()
print(custom_mp)
custom_mp.custom_method()

输出:

<vlc.MediaPlayer object at 0x7743d37db8f0>

AttributeError: 'MediaPlayer' object has no attribute 'custom_method'

CustomMediaPlayer
代替
custom_method
对象。

为什么会发生这种情况?是因为

vlc.MediaPlayer
_Ctype
类吗?

python vlc
1个回答
0
投票

如果基类重写

__new__
函数,就会发生这种情况,该函数确定当有人尝试实例化类时会发生什么。预期的行为是创建给定类参数的新实例,但
__new__
函数可以自由返回现有对象或根据其自己的内部逻辑创建对象。

在他们的评论中,Rogue链接到模块的源代码,该模块确实覆盖了

__new__
。如果有一种方法可以成功子类化
vlc.MediaPlayer
,它应该列在模块的文档中。

© www.soinside.com 2019 - 2024. All rights reserved.