@Sasha294

Как можно связать классы чтоб подобная конструкция работать?

class Library
clas Book

lib = Library(1, ’51 Some str., NY’)
lib += Book(‘Leo Tolstoi’, ‘War and Peace’)
lib += Book(‘Charles Dickens’, ‘David Copperfield’)
for book in lib:
# вывод в виде: [1] L.Tolstoi ‘War and Peace’
    print(book)
# вывод в виде: [‘War’, ‘Peace’]
    print(book.tag())
  • Вопрос задан
  • 118 просмотров
Решения вопроса 2
@deliro
class Book:
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return f"<Book: {self.name}>"

    def __eq__(self, other):
        if not isinstance(other, type(self)):
            return False
        return self.name == other.name


class Lib:
    def __init__(self, books=None):
        if books is None:
            self.books = []
        else:
            self.books = books[:]

    def __iadd__(self, other):
        if not isinstance(other, Book):
            raise TypeError("Not a book")
        self.books.append(other)
        return self

    def __iter__(self):
        return iter(self.books)


lib = Lib()
book1 = Book("Fluent Python")
book2 = Book("Mein Kampf")

lib += book1
lib += book2

for book in lib:
    print(book)


Однако, лучше не злоупотреблять оверрайдингом операторов неявной логикой и сделать явный метод .add_book() и явный метод .iterate_books()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы