Python 无法将二维数组初始化为类属性

问题描述 投票:0回答:1

我正在将转换表实现为类属性,

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之前定义的,并且它应该可以访问前一个?

python multidimensional-array class-attributes
1个回答
0
投票

您可以使用

__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]]
© www.soinside.com 2019 - 2024. All rights reserved.