Расширьте набор, чтобы сделать собственный набор

Это новый вопрос, потому что этот вопрос.

Я хочу расширить набор, чтобы создать собственный набор имен файлов в папке:

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(), предназначены только для повышения производительности.


person user3654650    schedule 09.06.2014    source источник
comment
Если вы хотите, чтобы | и & работали с вашим атрибутом files, а не с самим объектом, тогда да, вам нужно переопределить их. Нет особого смысла наследовать от set, если вы собираетесь создать другой набор в качестве атрибута и хранить там все данные. Либо создайте свой собственный тип, определяющий нужные вам операции, либо наследуйтесь от set и сохраняйте данные, напрямую манипулируя self.   -  person BrenBarn    schedule 09.06.2014
comment
Если все, что вам нужно, это проверка ввода, просто расширьте set и оберните функцию __init__() и другие функции мутации, такие как add() и update(), чтобы выполнить проверку.   -  person Addison    schedule 09.06.2014