How to make an array with attributes or objects of a class?

Asked

Viewed 2,495 times

1

Good evening, I’m a beginner in python and I have a question about how to make an array of an object or class. My main program contains a function that cuts into text, delimiting blocks and so on. Very simple. And I have another that only leaves the classes and objects, determining the types of each attribute. The function works correctly, however I cannot call the attributes of the Classes in my package.

The structure of the function needs to stay that way.

Nome = RecortaTexto(Offset,Bloco,Loja.Esqueleto.Nome.Valor_I,Loja.Esqueleto.Nome.Valor_I)

Main Program

from library.Tipos import Loja, Esqueleto, Modo

# Da o que está entre o inicio e o fim em determinado texto, respeitando offset e retornando offset inclusive.
def CortaFora(Offset,Texto,Inicio,Fim): 
    Inicial = Final = ''
    Inicial = PosEx(Inicio, Texto, Offset) + len(Inicio)
    Offset = Inicial
    Final = PosEx(Fim, Texto, Offset)
    Offset = Final
    return Texto[ Inicial:Final ].strip(' '), Offset

Offset = 0

Texto = '<h1 Teste </h1>'


Nome, Offset = CortaFora(Offset,Texto, Loja.Esqueleto.Valor_I, Loja.Esqueleto.Valor_F)

print(Nome)

Package where I stored the classes

from dataclasses import dataclass

class Modo(object):
   Descricao = str
   Valor_I = (data['Valor_I'])
   Valor_F = (data['Valor_F'])
   Versao = int 

class Esqueleto(object):
   Esqueleto = Modo()
   PRODUTO = int
   PRECOS  = int
   NOME   = str
   NOME2   = int

class Loja:
   ID = int # ID da Loja
   SID = str # ID em String da Loja para evitar conversão em mil lugares.
   Cron = str  # Cron
   Nome = str
   Esqueleto = [Modo] #Aqui tentei fazer o Esqueleto sendo um array de modo

The intention is to make Store receive a Skeleton object that receives valor_I and valor_F. As the example requested to me. I thank anyone who can help, and apologies if it was not clear my problem.

  • Well let me get this straight, you want your Shop class in the skeleton attribute, get the values of the Skeleton class as a list, is that it? Another question, your skeleton class has a Skeleton attribute there with the instance of the Mode class, your intention was to inherit the attributes of the Mode class or you need to create an instance of the same class?

  • Good morning, I need to create a class establishment. The question of the skeleton attribute is one of my problems, because I wanted to make him understand which skeleton receives a mode array. In case , if I choose 'PRODUCT' it will need to receive Valor_i, and Valor_f.

2 answers

1


Follow an example of the class Esqueleto with the construction method.

To test save this code in the file esqueleto.py.

class Esqueleto():

    def __init__(self, nome, produto, preco):
        self.nome = nome
        self.produto = produto
        self.preco = preco

Create a named file main.py and paste this code:

from esqueleto import Esqueleto

produto1 = Esqueleto("Tirol", "Leite Integral", 2.35)
produto2 = Esqueleto("Holandesa", "Queijo Prato", 8.99)
produto3 = Esqueleto("Nestlé", "Nescafé", 2.97)

lista = []

lista.append(produto1)
lista.append(produto2)
lista.append(produto3)

# Percorrendo a lista e imprimindo os produtos    

for produto in lista:
    print(produto.nome)
    print(produto.produto)
    print(produto.preco)
    print("\n")    

# Para imprimir cada índice da lista

print(lista[0].nome, lista[0].produto, lista[0].preco)
print(lista[1].nome, lista[1].produto, lista[1].preco)
print(lista[2].nome, lista[2].produto, lista[2].preco)

Note that in the first line of the file main.py the module esqueleto was imported for that class Esqueleto is available to be instantiated in this file.

Run the file main.py to test the outputs.

  • I would name this class Product. I don’t see much sense in the name Skeletor, but I did it to bring it closer to your logic. If you change the name, don’t forget to update the import in the main.py file.

1

Hello The code of Eden is very complete, with a very good code, I advise you to implement and try to see if it fits perfectly, however I want to say that it intends to continue with its implementation and I just wanted a solution to create the list of class Modo in the class attribute Loja follows a very simple implementation to get all the data of a class and turn into a list

class Modo(object):
   descricao = ''
   valor_I = ''
   valor_F = ''
   versao = ''

class Esqueleto(object):
   produto = ''
   preco  = ''
   nome   = ''
   nome2   = ''

class Loja:
   Id = '' # ID da Loja
   sid = '' # ID em String da Loja para evitar conversão em mil lugares.
   cron = ''  # Cron
   nome = ''
   esqueleto = [] #Aqui tentei fazer o Esqueleto sendo um array de modo

# Criando uma instancia da classe Modo, e preenchendo todos os atributos do objeto
m = Modo()
m.descricao = "Descrição"
m.valor_F = 15.2
m.valor_I = 85.55
m.versao = 1.0

# Mesma coisa com a classe Esqueleto
e = Esqueleto()
e.nome = "Um Nome"
e.nome2 = "Outro Nome"
e.preco = 5.10
e.produto = "PS4"
m.versao = 1.0

# Crio instancia da classe loja e no atributo esqueleto adiciono os valores preenchidos das classes anteriores.
loja = Loja()
loja.nome = "Minha Loja"
loja.sid = '12'
loja.Id = 12

# Transformando as classes Modo e Esqueleto como um dicionario
mdict = m.__dict__
edict = e.__dict__

# Adiciona dentro do atributo esqueleto da classe loja os valores do dicionario convertendo para lista
loja.esqueleto.append(list(mdict.values()))
loja.esqueleto.append(list(edict.values()))

print(loja.esqueleto) # [['Descrição', 15.2, 85.55, 1.0], ['Um Nome', 'Outro Nome', 5.1, 'PS4']]

# Caso prefira adicionar o dicionario completo das classes, ao invés dos valores apenas, basta adicionar o edict e o mdict, ficando assim loja.esqueleto.append(mdict)

Remembering that I advise you to build your class as Eden showed in the previous answer, because the way it creates, each instance of your class will have a specific value, and as you implemented all instances will have access to these values, because they were created as class attributes. If you don’t have much familiarity with python classes I advise you to read the documentation for an overview of python classes.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.