假设我有以下代码:
class Archive(object):
""" Archiv-File wrapper """
READ_MODE = 0
WRITE_MODE = 1
def __init__(self, file_):
self.file_ = file_
self._mode = None
@property
def mode(self):
return self._mode
@mode.setter
def mode(self, value):
self._mode = value
def open(self, mode="r", pwd=None):
raise NotImplemented("Subclasses should implement this method!")
def close(self):
raise NotImplemented("Subclasses should implement this method!")
################################################
class GzipGPGArchive(Archive):
READ_MODE = 'r:gz' # Open for reading with gzip compression.
WRITE_MODE = 'w:gz' # Open for gzip compressed writing.
SUFFIX = "tar.gz.gpg"
def __init__(self, *args, **kwargs):
super(GzipGPGArchive, self).__init__(*args, **kwargs)
@mode.setter # This causes unresolved reference
def mode(self, value):
# do internal changes
self._mode = value
def open(self):
pass
def close(self):
pass
所以知道什么是重写抽象类属性mode
的setter和getter方法的最佳python方法。在
重写子类GzipGPGArchive
中的@mode.setter
会导致未解析的引用!在
首先,Python中没有抽象属性。但是,您可以通过使用
abc
模块来实现抽象。也许它并不是真正的“Python”,但它是有效的。在这是具有继承和抽象的最小示例。将其用作模板:
相关问题 更多 >
编程相关推荐