es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obteniendo la ubicación de memoria en lugar del valor

Tengo una clase de nodo que tiene un atributo “symbol”, el cual es una cadena. Paso este valor a un método que eventualmente lo guarda como clave en un diccionario, pero de lo contrario no accede al valor hasta entonces.

Después de acceder a node.symbol, imprimo el valor.

carácter trans: ‘1’

Luego lo paso a otra función como único parámetro. En ese método, inmediatamente imprimo el símbolo usando:

print(symbol)

Pero imprime:

<pa3.RegEx object at 0x000001D2EFDC4640>

Me gustaría acceder al valor que debería ser una cadena “1” en lugar de esta ubicación de memoria. Sé que probablemente se ha preguntado muchas veces antes, pero no sé cómo llamar a este problema.

clase nodo:

def __init__(self, data):
    self.left = None
    self.right = None
    self.symbol = None  # será un carácter en el alfabeto, (), ~, *, o |
    self.data = data

def get_symbol(self):
    return self.symbol`

class RegEx:

def Convert(self, nod, NFA_stack): 
    trans_char = node.get_symbol(nod)
    print("tipo:", type(trans_char))
    print("carácter trans:", trans_char, "\n")

    if nod.left == None and nod.right == None:
        print("pasando trans_char al método")
        NFA = self.Generate_NFA(trans_char) 
        NFA_stack.append(NFA)

def Generate_NFA(symbol, leftNFA = None, rightNFA = None): #Los NFA son diccionarios, symbol es | o ~

    print("en nuevo método")
    print("símbolo:", symbol)

En este método, trans_char se reconoce como una cadena con un valor de ‘1’, pero después de pasar trans_char a ese otro método, se convierte en una dirección de memoria de la clase. El problema es que necesito usar esto como un valor en un diccionario, no solo imprimirlo.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema parece estar relacionado con cómo se accede y se pasa el atributo “symbol” entre métodos. En el código proporcionado, no está claro dónde se establece el atributo “symbol” para la instancia de la clase. Suponiendo que se establece en otro lugar, una solución potencial podría ser asegurarse de que el atributo “symbol” siempre sea una cadena, y luego usar el valor de cadena al pasarlo al método “Generate_NFA”.

    Por ejemplo:

    class node:
        def __init__ (self, data):
            self.left = None
            self.right = None
            self.symbol = None
            self.data = data
    
        def set_symbol(self, symbol):
            self.symbol = str(symbol)
    
        def get_symbol(self):
            return self.symbol
    
    class RegEX:
        def Convert(self, nod, NFA_stack):
            trans_char = node.get_symbol(nod)
            print("tipo:", type(trans_char))
            print ("carácter de transición:", trans_char, "\n")
    
            if nod.left == None and nod.right == None:
                print("pasando trans_char al método")
                NFA = self.Generate_NFA(trans_char)
                NFA_stack.append(NFA)
    
        def Generate_NFA(self, symbol, leftNFA = None, rightNFA = None):
            print("en el nuevo método")
            print("símbolo:", symbol)
    
            # Usar el símbolo como clave en el diccionario, con algún valor arbitrario
            mi_diccionario = {symbol:"valor_arbitrario"}
            print("mi_diccionario:", my_dict)
    

    Aquí, el método “set_symbol” se utiliza para asegurarse de que el atributo “symbol” sea siempre una cadena. Esto puede ser recuperado y pasado al método “Generate_NFA” como una cadena. Dentro del método “Generate_NFA”, el valor “symbol” se puede usar como clave en un diccionario (o de la manera que sea necesaria).

    Tenga en cuenta que la clase “RegEX” falta un colon después de su definición, lo cual he agregado en el ejemplo anterior.

Comments are closed.