Olá,
Após finalizar o código do Filmes.py, tentei implementar um método de busca de Filmes conforme o artigo abaixo de varias formas diferentes.
https://www.alura.com.br/artigos/como-comparar-objetos-no-python
Porém apareceu alguns erros como:
AttributeError: 'list' object has no attribute 'pesquisar'
ou
in __eq__
return self._nome == busca.nome
AttributeError: 'str' object has no attribute 'nome'
segue os códigos abaixo,
Somente um detalhe,
eu separeu em dois programas. Filme.py que tem os atributos e os métodos e locadora.py onde crio os objetos que consomem Filme.py
import os
from abc import ABCMeta, abstractmethod # Importação da classe abstrata
os.system('clear')
class Catalogo(metaclass = ABCMeta):
def __init__(self, nome, ano):
self._nome = nome.title()
self.ano = ano
self._likes = 0
@property
def likes(self):
return self._likes
def dar_like(self):
self._likes += 1
@property
def nome(self):
return self._nome
@nome.setter
def nome(self, novo_nome):
self._nome = novo_nome.title()
@abstractmethod
def __str__(self):
pass
def __eq__(self, busca):
return self._nome == busca.nome
class Filme(Catalogo):
def __init__(self, nome, ano, duracao):
# Herança da Classe mãe Catalogo para Filme
super().__init__(nome, ano)
self.duracao = duracao
def __str__(self):
return f'Nome: {self._nome} - Ano {self.ano} - {self.duracao} min - Likes: {self._likes}'
class Serie(Catalogo):
def __init__(self, nome, ano, temporadas):
# Herança da Classe mãe Catalogo para Serie
super().__init__(nome, ano)
self.temporadas = temporadas
def __str__(self):
return f'Nome: {self._nome} - Ano {self.ano} - {self.temporadas} temporadas - Likes: {self._likes}'
class Playlist():
def __init__(self, nome, catalogos):
self.nome = nome
self._catalogos = catalogos
def __getitem__(self, item):
return self._catalogos[item]
def __add__(self, item):
return self._catalogos + [item]
def __append__(self, item):
ad = [item]
return self._catalogos.append(ad)
def __len__(self):
return len(self._catalogos)
# OPÇAO DE PESQUISA #1
@property
def pesquisar(self, filme_procurado):
for programa in self._catalogos:
if filme_procurado == self._catalogos[programa].nome:
return True
return False
# OPÇAO DE PESQUISA #2
def __contains__(self, filme_procurado):
for programa in self._catalogos:
if filme_procurado == programa.nome:
return True
return False
from filme import Filme, Serie, Playlist
# List
vingadores = Filme('Vingadores', 2018, 180)
atlanta = Serie('Atlanta', 2018, 2)
tmep = Filme('Todo mundo em pânico',1999, 100)
demolidor = Serie('Demolidor', 2016, 2)
vf = Filme('Velozes e furiosos', 2010, 120)
# Likes
atlanta.dar_like()
atlanta.dar_like()
vingadores.dar_like()
tmep.dar_like()
tmep.dar_like()
demolidor.dar_like()
demolidor.dar_like()
demolidor.dar_like()
# List de Objetos
filmes_e_series = [vingadores, atlanta, demolidor, tmep]
playlist_fim_de_semana = Playlist("fim de semana", filmes_e_series)
# Impressão
print(f'Tamanho da playlist: {len(playlist_fim_de_semana)}')
for programa in playlist_fim_de_semana:
print(programa)
print("================")
# Incluir item
#playlist_fim_de_semana.append(vf)
playlist_fim_de_semana += vf #ou
playlist_fim_de_semana.append(vf)
for programa in playlist_fim_de_semana:
print(programa)
print(f'Tamanho da playlist: {len(playlist_fim_de_semana)}')
# OPÇAO DE PESQUISA DE CATALOGOS DE FILMES
filme_procurado = "Atlanta"
# OPÇAO DE PESQUISA #1
if filme_procurado in playlist_fim_de_semana:
print(f'O filme {filme_procurado} está na playlist.')
else:
print(f'O filme {filme_procurado} não está na playlist.')
# OPÇAO DE PESQUISA #2
if playlist_fim_de_semana.pesquisar(filme_procurado):
print(f'O filme {filme_procurado} está na playlist.')
else:
print(f'O filme {filme_procurado} não está na playlist.')