función attr.asdict() en Python

Python tiene una biblioteca llamada attrs que hace que el código escrito en un modo orientado a objetos sea mucho más fácil y conciso. En una clase que tiene datos, es mejor transformarlos en un diccionario. Podemos usar la función attr.asdict() en Python para devolver los valores de atributo attrs de i como dict. 

Sintaxis: attr.asdict (inst, recurse: bool=True, filter: __class__=Ninguno, dict_factory: , retain_collection_types: bool=False)

Parámetros:  
inst : instancia de una clase decorada con attrs 
recurse : (booleano) recurse en clases que también están decoradas con 
attrs dict_factory : un invocable para producir diccionarios de 
filter : un invocable que determina si un atributo está incluido (Verdadero) o descartado ( False) 
retain_collection_types : solo tiene sentido si recurse es True. 

Ejemplo 1: Tomemos un ejemplo muy simple de coordenadas de clase que acepta coordenadas como atributos.

Python3

# import library
import attr
  
  
# initialising class Coordinates, no need to
# initialize __init__ method
@attr.s
class Coordinates(object):
    
    # attributes
    x = attr.ib()
    y = attr.ib()
  
  
c1 = Coordinates(1, 2)
  
# converting data into dict using attr.asdict() 
# function
print(attr.asdict(Coordinates(x=1, y=2)))

Producción:

{'x': 1, 'y': 2}

Aquí, los datos pasados ​​se convierten en un formulario de diccionario. 

Ejemplo 2: aquí hay otro ejemplo de información de usuario de clase que aceptará el nombre y la identificación de correo electrónico del usuario como atributos, pero no incluirá la identificación de correo electrónico del usuario en forma de dictado de datos. 

Python3

import attr
  
  
@attr.s
class UserInfo(object):
    users = attr.ib()
  
  
@attr.s
class User(object):
    email = attr.ib()
    name = attr.ib()
  
  
# including only name and not email
attr.asdict(UserInfo([User("lee@har.invalid", "Lee"),
                      User("rachel@har.invalid", "Rachel")]),
            filter=lambda attr, value: attr.name != "email")

Producción:

{'users': [{'name': 'Lee'}, {'name': 'Rachel'}]}

Aquí obtendremos un diccionario anidado con el correo electrónico del usuario excluido. 

Ejemplo 3: podemos probar un enfoque diferente para incluir o excluir un atributo utilizando el filtro de parámetros de la función attr.asdict(). 
 

Python3

import attr
  
  
@attr.s
class UserInfo(object):
    name = attr.ib()
    password = attr.ib()
    age = attr.ib()
  
  
# excluding attributes
print(attr.asdict(UserInfo("Marco", "abc@123", 22),
                  filter=attr.filters.exclude(
                      attr.fields(UserInfo).password, int)))
  
  
@attr.s
class Coordinates(object):
    x = attr.ib()
    y = attr.ib()
    z = attr.ib()
  
  
# inclusing attributes
print(attr.asdict(Coordinates(20, "5", 3),
                  filter=attr.filters.include(int)))

Producción:

{'name': 'Marco'}
{'x': 20, 'z': 3}

Aquí, en la clase UserInfo , hemos pasado tres argumentos nombre, contraseña y edad, de los cuales edad es un valor entero y los valores restantes son strings. En el parámetro de filtro, hemos excluido atributos: contraseña y valores enteros (aquí -edad), por lo que la contraseña y la edad se excluirán del diccionario.

En la clase Coordinates , hemos pasado tres argumentos: coordenadas x, y y z. Aquí la coordenada y se pasa como una string. En el parámetro de filtro, hemos incluido valores enteros. Por lo tanto, las coordenadas x y z se incluyen en el diccionario final. Si la coordenada y se hubiera pasado como un número entero, también se habría incluido.

Publicación traducida automáticamente

Artículo escrito por devanshigupta1304 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *