python - Python 中的基本多态性混淆

标签 python inheritance polymorphism

我正在阅读《Python 3 面向对象编程》,并对其中一个示例感到有点困惑。这是ch。 3,第 3 页。 78:

class AudioFile:
    def __init__(self, filename):
        if not filename.endswith(self.ext):
            raise Exception("Invalid file format")
        self.filename = filename

class MP3File(AudioFile):
    ext = "mp3"
    def play(self):
        print("playing {} as mp3".format(self.filename))

所以MP3File继承自AudioFile。父类(super class) AudioFile 如何访问 self.ext?例如,Java 有抽象类,因此不能保证 AudioFile 一定可以实例化/具有 ext 字段。更重要的是,我认为子类继承了父类(super class)的所有信息,但在另一个方向上没有信息流。

看来我错了...

任何澄清都会很好,

克莱曼

最佳答案

理想情况下,AudioFile 应该是 abc因为它确实定义了字段 (self.ext)。如果您尝试实例化 AudioFile,您应该会收到属性错误。

我认为你是对的..这个例子只是还不想进入 abc 。

关于python - Python 中的基本多态性混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31862883/

相关文章:

json - 在 Swift 中使类默认符合 Codable

powershell - 如何从 PowerShell 中的静态方法动态引用类和静态属性?

scala - 在 Scala 中使用类型成员来减少类型冗长是否可行?

python - Django 无法使用原子事务的 try-exception block 回滚

python - 用计算值声明模块级常量的 pythonic/更快的方法是什么?

python - Sublime Text 3 的 REPL 错误

c++ - 如何在不导致段错误的情况下测试 "dynamic_cast"的结果

python - 如何在 EC2 服务器上连续运行 Python 脚本?

c# - 为什么我的公共(public)类不能扩展内部类?

c++ - 在构造函数/解构函数的情况下,“对 vtable 的 undefined reference ”