Eu n sei se vou saber explicar minha dúvida, mas vou tentar mesmo assim.
Bom, no código o instrutor falou que precisamos criar uma cópia da lista para poder evitar que o usuário dê um append na lista de lances diretamente. Até aí eu entendi, pois cria-se uma nova ID com a cópia que referencia outro objeto na memória. Mas a Classe AVALIADOR() utiliza justamente a property lances() que referencia a cópia da lista de lances para poder fazer sua avaliação. Pelos testes quer eu fiz, quando vc usa uma cópia da lista original, nem a cópia da lista original e nem a lista original recebem os valores do append que vc tenta fazer quando está usando a orientação a objeto. Eu gostaria de saber prque nem a copia nem a lista original recebem os valores quando vc usa o append e prque elas so recebem os valores quando vc usa a propriedade que vc criou.
N sei se consegui explicar minha dúvida direito, me desculpa se n fui claro. Vou deixar um teste que eu fiz aqui
class Lance:
def __init__(self, nome, valor):
self.nome = nome
self.valor = valor
class Leilao:
def __init__(self, descricao):
self.descricao = descricao
self.__lances = []
def propoe(self, lance: Lance):
self.__lances.append(lance)
@property
def lista_verdadeira(self):
return self.__lances
@property
def lances(self):
return self.__lances[:]
#Criando leilao
leilao = Leilao('celular')
#Criando lances
lance = Lance('João', 200)
lance2 = Lance('Luma', 300)
#Antes do propoe
leilao.lances.append(lance)
leilao.lances.append(lance2)
print('Antes do propoe')
print(leilao.lances)
print(leilao.lista_verdadeira)
for lance in leilao.lista_verdadeira:
print(lance.valor)
#Depois do propoe
leilao.propoe(lance)
leilao.propoe(lance2)
print('Depois do propoe')
print(leilao.lances)
print(leilao.lista_verdadeira)
for lance in leilao.lista_verdadeira:
print(f'lance {lance.valor} de {lance.nome}')
Resultado:
Antes do propoe
[]
[]
Depois do propoe
[<__main__.Lance object at 0x000002A932ABF908>, <__main__.Lance object at 0x000002A932ABF988>]
[<__main__.Lance object at 0x000002A932ABF908>, <__main__.Lance object at 0x000002A932ABF988>]
lance 200 de João
lance 300 de Luma