You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python传字符串参数得到RegEx对象内存地址无法获取对应字符串值问题

问题根因

这是Python实例方法的语法规则导致的参数错位问题:

  • Python类的普通实例方法,第一个参数默认接收当前类的实例对象,惯例命名为self,调用时不需要手动传参,Python会自动注入该参数。
  • 你定义的Generate_NFA是RegEX类的实例方法,第一个参数写的是symbol,调用self.Generate_NFA(trans_char)时,Python自动把RegEX实例对象传给了第一个参数symbol,你手动传入的trans_char反而被赋值给了第二个参数leftNFA,所以打印symbol时输出的是RegEX对象的内存地址。
解决方法

修改Generate_NFA方法的定义,在参数列表首位添加self即可,同时可以修正代码里的其他不规范写法:

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): 
        # 替换为更符合Python规范的实例方法调用写法
        trans_char = nod.get_symbol()
        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)
    # 仅需在参数第一位添加self即可
    def Generate_NFA(self, symbol, leftNFA = None, rightNFA = None): 
        print("in new method")
        print("symbol: ", symbol)

修改后调用Generate_NFA传入的trans_char就会正确赋值给symbol参数,你可以直接用该变量作为字典的键使用。

内容的提问来源于stack exchange,提问作者jabo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:36:04