Python para Desenvolvedores

2ª edição, revisada e ampliada

Capítulo 21: Propriedades


Propriedades (properties) são atributos calculados em tempo de execução. As propriedades são criadas através da função / decorador property.

O uso de propriedades permite:

  • Validar a entrada do atributo.
  • Criar atributos apenas de leitura.
  • Simplificar o uso da classe.
  • Mudar de um atributo convencional para uma propriedade sem a necessidade de alterar as aplicações que utilizam a classe.

Exemplo de código sem propriedades:

In [3]:
# get_*, set_*...


class Projetil(object):

    def __init__(self, alcance, tempo):

        self.alcance = alcance
        self.tempo = tempo

    def get_velocidade(self):

        return self.alcance / self.tempo


moab = Projetil(alcance=10000, tempo=60)

print moab.get_velocidade()
166

Exemplo de propriedade através de decorador:

In [4]:
# Exemplo de property de leitura


class Projetil(object):

    def __init__(self, alcance, tempo):

        self.alcance = alcance
        self.tempo = tempo

    @property
    def velocidade(self):

        return self.alcance / self.tempo


moab = Projetil(alcance=10000, tempo=60)

# A velocidade é calculada
print moab.velocidade
166

Exemplo de propriedade através de chamada de função:

In [5]:
# Property de leitura e escrita


class Projetil(object):

    def __init__(self, alcance, tempo):

        self.alcance = alcance
        self.tempo = tempo

    # Calcula a velocidade
    def getv(self):

        return self.alcance / self.tempo

    # Calcula o tempo
    def setv(self, v):

        self.tempo = self.alcance / v

    # Define a propriedade
    velocidade = property(getv, setv)


moab = Projetil(alcance=10000, tempo=60)
print moab.velocidade

# Muda a velocidade
moab.velocidade = 350
print moab.tempo
166
28

Propriedades são particularmente interessantes para quem desenvolve bibliotecas para serem usadas por outras pessoas.

In [1]:
 
Out[1]: