Qual a diferença de alterar um atributo através de um método ou através de uma propriedade setter?
Quando usar uma propriedade setter e quando usar a chamada de um método para alterar um atributo?
Qual a diferença de alterar um atributo através de um método ou através de uma propriedade setter?
Quando usar uma propriedade setter e quando usar a chamada de um método para alterar um atributo?
Nicholas, na prática não há muita diferença, mas o uso das properties é considerado mais pythônico.
Nicholas,
Na prática, nenhuma.
Quando vemos uma classe em Python escrita com métodos getters e setters, logo percebemos que o programador ainda não "pegou o jeito" de OOP em Python. Getters e setters são muito comuns em outras linguagens de programação porque os atributos normalmente são declarados com escopo privado. Ou seja, quem usa a classe não tem acesso aos atributos do objeto. Por isso criaram os métodos get...() e set...() para "violar" o encapsulamento dos membros privados.
Encapsulamento é uma coisa muito boa. Devemos usá-lo sempre que for útil. Aliás, talvez as classes sejam uma das melhores formas de colocarmos o encapsulamento em prática.
Python, claro, encoraja encapsulamento, mas de outra forma. Para começar, todos os membros de uma classe -- métodos e atributos -- têm visibilidade pública. Isso mesmo. Nada em um objeto fica escondido.
Muito boa resposta, Welton!