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使用FileA .__ read()来读取文件而不是File .__ read()? :S
先感谢您.
解决方法:
使用双下划线对属性进行前缀不会使该属性成为私有,它只会使多态变得不可能,因为属性名称会被当前类名称破坏.将其更改为单个下划线前缀.