Python 值更新到多个字典
我正在用Python 2.7.6构建图灵机的一部分。我使用的方法包括创建一个state类,并为每个state创建一个新的类实例。在这些状态中,我有一个空白字典来存储转换函数Python 值更新到多个字典,python,class,dictionary,Python,Class,Dictionary,我正在用Python 2.7.6构建图灵机的一部分。我使用的方法包括创建一个state类,并为每个state创建一个新的类实例。在这些状态中,我有一个空白字典来存储转换函数 class State: name = "" transitions = {} def __init__(self, name): self.name = name def addTransition(self, symbol, transition): s
class State:
name = ""
transitions = {}
def __init__(self, name):
self.name = name
def addTransition(self, symbol, transition):
self.transitions[symbol] = transition
状态的每个实例都保存在一个字典中,以便在初始化期间可以轻松引用。这允许我通过打开以其名称为键的字典条目来引用对象
self.States[temp] = State(temp)
//temp is read from the tape, currently this is called twice with temp = q0 and q1
当我尝试将转换函数添加到内部字典时,问题就出现了。当我将记录添加到一个状态时,它会将它添加到每个状态内的字典中,在每个状态内创建一个相同的副本。显然,这会产生问题
def readTransitionTuple(self):
StateI = ''
StateF = ''
SymbolI = ''
SymbolF = ''
Action = ''
// Code reads input from tape here //
print (StateI, StateF, SymbolI, SymbolF, Action)
self.States[StateI].addTransition(SymbolI,(StateF, SymbolF, Action))
readTransitionTuple被调用两次,并为变量输出以下值:
('q0', 'q2', '0', '1', 'R')
('q1', 'q0', '1', '0', 'L')
当我尝试打印状态q0的转换时,它会给我以下输出:
{'1': ('q0', '0', 'L'), '0': ('q2', '1', 'R')}
如果我尝试打印q1,它的输出是相同的。如何将转换函数只分配给一个状态而不是所有状态?是什么造成了这种影响?我唯一的想法是,它与在字典中存储状态有关。而不是:
class State:
name = ""
transitions = {}
def __init__(self, name):
self.name = name
def addTransition(self, symbol, transition):
self.transitions[symbol] = transition
您需要:
class State:
def __init__(self, name):
self.name = name
self.transitions = {}
def addTransition(self, symbol, transition):
self.transitions[symbol] = transition
阅读教程了解更多信息。尤其是。这是因为您将名称和转换定义为静态(类)变量。在python中,成员变量是根据需要动态创建的,因此,如果要使用成员变量名称和转换声明状态类,请执行以下操作:
class State:
instance_count = 0 # as an example, this is now a static variable counting instances.
def __init__(self, name):
self.name = name # name is now a member variable
self.transitions = {} # transitions is now a member variable
State.instance_count += 1
def addTransition(self, symbol, transition):
self.transitions[symbol] = transition
def __del__(self):
State.instance_count -= 1
不要忘记使用反构造函数来减少计数!谢谢卡尔普拉特!我更新了答案。这就是我为了学习而尝试添加到示例中得到的结果。