Это новый вопрос, потому что этот вопрос.
Я хочу расширить набор, чтобы создать собственный набор имен файлов в папке:
class FilesSet(set):
def __init__(self, in_dir = None):
set.__init__(self, ())
self.in_dir = ''
self.files = set()
if in_dir:
self.in_dir = in_dir
self.files = set(map(os.path.basename,
glob.glob(self.in_dir + "/*.txt")))
def __contains__(self, item):
return item in self.files
def __len__(self):
return len(self.files)
def __iter__(self):
return iter(self.files)
Когда я пробую это:
f1 = FilesSet(in_dir = inDir1)
f2 = FilesSet(in_dir = inDir2)
c1 = f1 | f2
c2 = f1 & f2
print(c1, c2)
c1 и c2 пусты. Почему? Должен ли я перезаписывать другие методы из набора? Из ссылки я думаю, мне нужно только определить содержит, len и iter. Насколько я понимаю, другие методы, такие как or(), sub(), xor(), предназначены только для повышения производительности.
|
и&
работали с вашим атрибутомfiles
, а не с самим объектом, тогда да, вам нужно переопределить их. Нет особого смысла наследовать отset
, если вы собираетесь создать другой набор в качестве атрибута и хранить там все данные. Либо создайте свой собственный тип, определяющий нужные вам операции, либо наследуйтесь отset
и сохраняйте данные, напрямую манипулируяself
. - person BrenBarn   schedule 09.06.2014set
и оберните функцию__init__()
и другие функции мутации, такие какadd()
иupdate()
, чтобы выполнить проверку. - person Addison   schedule 09.06.2014