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