我正在将转换表实现为类属性,
class Phase:
num_states = 15
transition_table = [[False for _ in range(num_states)] for _ in range(num_states)]
但是失败了
NameError: name 'num_states' is not defined
。
然而,一维数组按预期工作,
class Phase:
num_states = 15
transition_table = [False for _ in range(num_states)] # this works
我想知道为什么会出现这种情况,因为num_states是在transition_table之前定义的,并且它应该可以访问前一个?
您可以使用
__init__
或 @classmethod
:
class Phase:
num_states = 15
def __init__(self):
self.transition_table = [[False for _ in range(self.num_states)] for _ in range(self.num_states)]
P = Phase()
print(P.num_states, P.transition_table)
class Phase:
num_states = 15
@classmethod
def _table(cls):
cls.transition_table = [[False for _ in range(cls.num_states)] for _ in range(cls.num_states)]
Phase._table()
print(Phase.num_states, Phase.transition_table)
15 [[False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]]