Em Python, após criar uma instância de uma classe, não está limitado aos valores atribuídos durante a inicialização. Pode modificar diretamente os atributos de uma instância. Por exemplo, vamos usar a nossa classe Book de antes. Depois de criar uma instância de Book, pode querer atualizar o número de páginas ou o nome do autor. Pode conseguir isso acedendo diretamente ao atributo usando o operador ponto ., e atribuindo um novo valor:
class Book:
def __init__(self, title, author, pages):
self.title = title # Atribuir o título à instância do livro
self.author = author # Atribuir o autor à instância do livro
self.pages = pages # Atribuir o número de páginas à instância do livro
self.is_read = False # O livro ainda não foi lido
book1 = Book('To Kill a Mockingbird', 'Harper Lee', 281)
print(book1.pages) # 281
book1.pages = 324 # Atualizar o número de páginas
print(book1.pages) # 324
print(book1.author) # 'Harper Lee'
book1.author = 'Lee, Harper' # Atualizar o nome do autor
print(book1.author) # 'Lee, Harper'
Desafio: Criar uma Classe Book
A sua tarefa é criar uma classe Book com quatro atributos:
title: padrão "Untitled Book"
author: padrão "Unknown Author"
price: padrão 0.0
quantity_in_stock: padrão 0
A classe deve inicializar todos os atributos com estes valores padrão no seu construtor (o método __init__ não deve aceitar argumentos). A classe também deve incluir um método display para mostrar os atributos atuais do livro num formato legível. O formato deve ser "Title: [title], Author: [author], Price: [price], Quantity in stock: [quantityinstock]".
O programa irá então receber duas linhas de entrada. A primeira linha contém o nome de um atributo (title, author, price, quantity_in_stock). A segunda linha contém um valor para esse atributo.
O seu programa deve atribuir este novo valor ao atributo especificado na entrada e, em seguida, chamar o método display no objeto Book para imprimir os atributos atuais do livro.
Entrada
Saída
title
War and Peace
Title: War and Peace, Author: Unknown Author, Price: 0.0, Quantity in stock: 0