【问题标题】:Getting memory location instead of value获取内存位置而不是值
【发布时间】:2022-01-03 06:46:15
【问题描述】:

我有一个节点类,它有一个“符号”属性,它是一个字符串。我将此值传递给一个方法,该方法最终将其保存为字典中的键,但在此之前不会访问该值。

访问node.symbol后,我打印值

反式字符:'1'

然后我将它作为唯一参数传递给另一个函数。在该方法中,我立即使用以下方法打印符号:

print(symbol)

但它会打印:

我想访问应该是字符串“1”而不是这个内存位置的值。 我知道这可能以前被问过很多次,但我不知道该怎么称呼这个问题

class node:

    def __init__(self,data):
        self.left = None
        self.right = None
        self.symbol = None  #will be a ch in alphabet, (), ~, *, or |
        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("type:", type(trans_char))
        print("trans char:", trans_char, "\n")

        if nod.left == None and nod.right == None:
            print("passing trans_char into method")
            NFA = self.Generate_NFA(trans_char) 
            NFA_stack.append(NFA)
     def Generate_NFA(symbol, leftNFA = None, rightNFA = None): #NFA's are dictionaries, symbol is | or ~

        print("in new method")
        print("symbol: ", symbol)

在此方法中,trans_char 被识别为值为 '1' 的字符串,但在将 trans_char 传递给其他方法后,它变成了该类的某个内存地址。问题是我需要将其用作字典中的值,而不仅仅是打印它。

【问题讨论】:

  • 如果你打印一个对象,你会得到调用它的 __str__() 或 __repr__() 函数的结果,如果它有一个,或者你看到的默认值。您可以覆盖其中之一,或者如果您想从“符号”打印特定值,只需打印它即可。比如打印(symbol.value)
  • 我试过了,但由于某种原因,它一直变成那个地址。我正在尝试将值传递到字典中,但因为它是一个类对象,所以我无法用它做任何事情。
  • 如果您不发布复制品,我只能提供一般性的指导。
  • 对不起,我将它添加到原帖中,因为我不知道如何将代码添加到 cmets。顺便说一句,我非常感谢您的帮助
  • 如果我复制粘贴并运行它,节点未定义。 “builtins.NameError:名称'节点'未定义”

标签: python memory


【解决方案1】:

method 中的第一个参数是为类对象本身保留的,因此Generate_NFA(symbol,...) 使 Python 认为 symbol 是为其调用方法的 RegEx 类的对象。

将您的函数定义编辑到下面应该可以解决问题:

def Generate_NFA(self, symbol, leftNFA = None, rightNFA = None):

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多