Estou tendo problemas para entender por que a herança não está funcionando no exemplo a seguir:
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()
Isso produz:
<vlc.MediaPlayer object at 0x7743d37db8f0>
AttributeError: 'MediaPlayer' object has no attribute 'custom_method'
em vez de um CustomMediaPlayer
objeto, com o custom_method
.
Por que isso está acontecendo? É porque vlc.MediaPlayer
é uma _Ctype
classe?
Isso pode acontecer se a classe base sobrescrever o
__new__
método, que controla o que acontece quando alguém tenta instanciar a classe. O comportamento típico é que uma nova instância do argumento de classe fornecido é criada; mas a__new__
função é livre para retornar um objeto existente, ou criar um objeto de acordo com sua própria lógica interna.Em seu comentário , Rogue vincula ao código-fonte do módulo, que de fato substitui
__new__
. Se houver uma maneira de subclassificarvlc.MediaPlayer
com sucesso, ela deve ser listada na documentação do módulo; caso contrário, a maneira de abordar esse problema dependerá de seus requisitos específicos.