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
相关产品推荐
相关产品推荐

