¿Cómo obtener una lista de atributos de clase en Python?

Una clase es un proyecto o prototipo definido por el usuario a partir del cual se crean objetos. Las clases proporcionan un medio para agrupar datos y funcionalidad. La creación de una nueva clase crea un nuevo tipo de objeto, lo que permite crear nuevas instancias de ese tipo. Cada instancia de clase puede tener atributos adjuntos para mantener su estado. Las instancias de clase también pueden tener métodos (definidos por su clase) para modificar su estado.

Ejemplo:

# Python program to demonstrate
# classes
  
  
class Student:
      
    # class variable
    stream = "COE"
      
    # Constructor
    def __init__(self, name, roll_no):
          
        self.name = name
        self.roll_no = roll_no
          
# Driver's code
a = Student("Shivam", 3425)
b = Student("Sachin", 3624)
  
print(a.stream)
print(b.stream)
print(a.name)
print(b.name)
  
# Class variables can be accessed
# using class name also 
print(Student.stream) 

Producción :

COE
COE
Shivam
Sachin
COE

Nota: Para obtener más información, consulte Clases y objetos de Python .

Obtener una lista de atributos de clase

Es importante conocer los atributos con los que estamos trabajando. Para datos pequeños, es fácil recordar los nombres de los atributos, pero cuando se trabaja con datos grandes, es difícil memorizar todos los atributos. Afortunadamente, tenemos algunas funciones en Python disponibles para esta tarea.

Método 1: para obtener la lista de todos los atributos, métodos junto con algunos métodos mágicos heredados de una clase, usamos un llamado dir().

Ejemplo:

class Number :
      
    # Class Attributes
    one = 'first'
    two = 'second'
    three = 'third'
      
    def __init__(self, attr):
        self.attr = attr
          
    def show(self): 
        print(self.one, self.two, self.three, self.attr)
          
n = Number(2)
n.show()
  
  
  
# Passing both the object 
# and class as  argument
# to the dir method
print('\nBy passing object of class')
print(dir(n))
  
print('\nBy passing class itself ')
print(dir(Number))

Producción :

primero segundo tercero 2

Pasando objeto de clase
[‘__class__’, ‘__delattr__’, ‘__dict__’, ‘__dir__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__getattribute__’, ‘__gt__’, ‘__hash__’, ‘__init__’, ‘__init_subclass__’, ‘__le__’, ‘__lt__’, ‘__module__’, ‘__ne__’, ‘__new__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’, ‘__sizeof__’, ‘__str__ ‘, ‘__subclasshook__’, ‘__weakref__’, ‘attr’, ‘one’, ‘show’, ‘tres’, ‘dos’]

Pasando la clase misma
[‘__class__’, ‘__delattr__’, ‘__dict__’, ‘__dir__’, ‘__doc__’, ‘__eq__’, ‘__format__’, ‘__ge__’, ‘__getattribute__’, ‘__gt__’, ‘__hash__’, ‘ __init__’, ‘__init_subclass__’, ‘__le__’, ‘__lt__’, ‘__module__’, ‘__ne__’, ‘__new__’, ‘__reduce__’, ‘__reduce_ex__’, ‘__repr__’, ‘__setattr__’, ‘__sizeof__’, ‘__str__’ , ‘__subclasshook__’, ‘__weakref__’, ‘uno’, ‘mostrar’, ‘tres’, ‘dos’]

Método 2: Otra forma de encontrar una lista de atributos es usando el módulo inspect. Este módulo proporciona un método llamado getmemebers()que devuelve una lista de métodos y atributos de clase.

Ejemplo 1:

import inspect
  
  
class Number :
      
    # Class Attributes
    one = 'first'
    two = 'second'
    three = 'third'
      
    def __init__(self, attr):
        self.attr = attr
          
    def show(self): 
        print(self.one, self.two, self.three, self.attr)
          
          
# Driver's code
n = Number(2)
n.show()
  
# getmembers() returns all the 
# members of an object 
for i in inspect.getmembers(n):
      
    # to remove private and protected
    # functions
    if not i[0].startswith('_'):
          
        # To remove other methods that
        # doesnot start with a underscore
        if not inspect.ismethod(i[1]): 
            print(i)

Producción :

first second third 2
('attr', 2)
('one', 'first')
('three', 'third')
('two', 'second')

Método 3: Para encontrar atributos también podemos usar el método mágico __dict__. Este método solo devuelve atributos de instancia.

Ejemplo:

class Number :
      
    # Class Attributes
    one = 'first'
    two = 'second'
    three = 'third'
      
    def __init__(self, attr):
        self.attr = attr
          
    def show(self): 
        print(self.one, self.two, self.three, self.attr)
          
# Driver's code
n = Number(2)
n.show()
  
# using __dict__ to access attributes
# of the object n along with their values
print(n.__dict__)
  
# to only access attributes
print(n.__dict__.keys())
  
# to only access values
print(n.__dict__.values())

Producción:

first second third 2
{'attr': 2}
dict_keys(['attr'])
dict_values([2])

Publicación traducida automáticamente

Artículo escrito por akritigoswami 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 *