Python中的多态性

Pau*_*tas 3 python methods polymorphism

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
Run Code Online (Sandbox Code Playgroud)

我的问题:出了什么问题?我如何修复我的代码到FileA使用FileA.__read()来读取文件而不是File.__read()?:S

先感谢您.

Ign*_*ams 7

使用双下划线对属性进行前缀不会使该属性成为私有,它只会使多态变得不可能,因为属性名称会被当前类名称破坏.将其更改为单个下划线前缀.

  • 更好的是,简单地避免所有与"隐私"愚弄,直到你实际上有人使用属性或方法错误地破坏你的类的实际问题.直到有人**误解你的API,不要使用任何类型的隐私构造. (3认同)