Python中的多态

3 投票
2 回答
1063 浏览
提问于 2025-04-16 05:42
class File(object):
    def __init__(self, filename):
        if os.path.isfile(filename):
            self.filename = filename
            self.file = open(filename, 'rb')
            self.__read()
        else:
            raise Exception('...')

    def __read(self):
        raise NotImplementedError('Abstract method')

class FileA(File):
    def __read(self):
        pass

file = FileA('myfile.a')

# NotImplementedError: Abstract method

我的问题是:哪里出错了?我该怎么修复我的代码,让FileA.__read()来读取文件,而不是File.__read()?:S

提前谢谢你们。

2 个回答

1

你也可以在基类中不定义这个方法,这样也能达到相同的效果。

import os
class File(object):
    def __init__(self, filename):
        if os.path.isfile(filename):
            self.filename = filename
            self.file = open(filename, 'rb')
            self._read()
        else:
            raise Exception('...')
class FileA(File):
    def _read(self):
        pass
file = FileA('myfile.a')

理解类的继承对理解Python类是非常重要的。

7

在属性前面加上两个下划线并不会让这个属性变成私有的,它只是让多态性变得不可能,因为属性的名字会和当前的类名混合在一起。建议你改成一个下划线前缀就可以了。

撰写回答