Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Python Attrs:classes de dados avançadas, com código de exemplo


O pacote Python Attrs permite criar classes de dados avançadas usando anotações simples. Claro, python também tem seu próprio módulo de classe de dados nativo, mas o pacote Python attrs oferece alguns recursos extras que você pode gostar!

Índice

Instalar atributos


O pacote attrs não faz parte da biblioteca base, então você precisará instalá-lo com o comando pip install ou algo similar, como Pipenv. Você provavelmente também deseja criar um ambiente virtual, para que não interfira em outros projetos que você possui. O pacote é chamado attrs, então instalá-lo ficará assim:
$ pip install attrs

# or with pipenv:
$ pipenv install attrs

Attrs vs classes de dados


Os autores de attrs de fato, trabalharam no PEP que introduziu classes de dados em Python. As classes de dados nativas do Python são intencionalmente mantidas mais simples e fáceis de entender, enquanto o attrs oferece toda a gama de recursos que você deseja!

Algumas das razões para escolher Python attrs sobre as classes de dados embutidas são:

Um exemplo básico de atributos do Python


Vejamos primeiro um exemplo muito básico:
import attr

@attr.s
class Person(object):
    name = attr.ib(default='John')
    surname = attr.ib(default='Doe')
    age = attr.ib(init=False)
    
p = Person()
print(p)
p = Person('Bill', 'Gates')
p.age = 60
print(p)

# Output: 
#   Person(name='John', surname='Doe', age=NOTHING)
#   Person(name='Bill', surname='Gates', age=60)

Algumas observações:

Em seguida, vamos ver os recursos mais importantes que este pacote oferece em classes de dados regulares:validadores e conversores.

Exemplo do validador de attrs do Python


Você pode adicionar validadores à sua classe de dados attrs de duas maneiras:
  1. Usando um decorador
  2. Fornecendo uma função que pode ser chamada

Vou demonstrar o método de função que pode ser chamado aqui primeiro. Attrs oferece vários validadores prontos para uso, dos quais usaremos o instance_of validador no exemplo a seguir:
>>> @attr.s
... class C(object):
...     x = attr.ib(validator=attr.validators.instance_of(int))
>>> C(42)
C(x=42)
>>> C("a string")

Traceback (most recent call last):
   ...
TypeError: ("'x' must be <type 'int'> (got 'a string' that is a <type 'str'>).", ...

Como tentamos criar um objeto C com um valor de string para x, o validador instance_of gera um erro porque requer um tipo int em vez de uma string.

Vamos agora definir nosso próprio validador:
import attr

@attr.s
class DividableByTwo(object):
    x = attr.ib()

    @x.validator
    def check(self, attribute, value):
        if value % 2 != 0:
            raise ValueError(f'{value} is not dividable by 2')

print (DividableByTwo(60))
print (DividableByTwo(11))

# Output will be something like:
# DividableByTwo(x=60)
# ...
# ValueError: 11 is not dividable by 2

Exemplo de conversor attrs do Python


Um conversor pega o valor definido e o converte automaticamente. Você pode usar isso para todos os tipos de propósitos. Um exemplo é converter automaticamente um valor em um int. Novamente, vamos começar usando uma função que pode ser chamada, neste caso, simplesmente usamos a função int() do Python:
import attr

@attr.s
class C(object):
    x = attr.ib(converter=int)

c = C("1")
print(c)
# Output:
# C(x=1)

Nossa entrada (a string “1”) foi convertida para um inteiro automaticamente. Como os conversores são executados antes dos validadores, você pode validar o valor final após a conversão. Por exemplo, você pode vir os dois exemplos acima para primeiro converter qualquer entrada para int e, em seguida, verificar se o valor é divisível por dois.

Usando slots com Python attrs


Finalmente, você pode dizer ao attrs para usar classes com slot. As classes com slot têm algumas vantagens sobre as classes regulares:

Em resumo, com uma classe com slot, você declara explicitamente quais atributos de instância você espera que suas instâncias de objeto tenham. Dessa forma, o Python pode deixar de fora algumas verificações e afins, resultando em menos uso de memória e pequenos aumentos de velocidade. Você pode encontrar mais detalhes na documentação do attrs aqui.

No entanto, as classes com slot também vêm com ressalvas, especialmente quando você as cria manualmente. Felizmente, o attrs nos oferece uma maneira simples de habilitar o recurso:
import attr

@attr.s(slots=True)
class YourClassName:
    ...

Continue aprendendo


python

  1. Tipos de dados Python
  2. Função Python String strip () com EXEMPLO
  3. Python String count() com EXEMPLOS
  4. Função Python round() com EXEMPLOS
  5. Função Python map() com EXEMPLOS
  6. Python Timeit() com exemplos
  7. Contador Python em coleções com exemplo
  8. Python time.sleep():adicionar atraso ao seu código (exemplo)
  9. Python List count() com EXEMPLOS
  10. Python List index() com exemplo