使用字典理解 II 的 Python 类变量赋值

问题描述

这看起来像是以下内容的副本: Python class variable assignment using dictionary comprehension 只是那个问题他们只处理WHY,但没有针对这个问题提出解决方案。

情况:

class language():
    LANGUAGES = ['EN','DE','FR','NL']
    ARTICLES_EN = ['the','a']
    ARTICLES_DE = ['der','die','das']
    ARTICLES_FR = ['le','la','les','las']
    ARTICLES_NL = ['het','die']
    ARTICLES    = [ARTICLES_EN,ARTICLES_DE,ARTICLES_FR,ARTICLES_NL]
    print(LANGUAGES)
    LANG_VARS = {}
    LANG_VARS = {LANGUAGES[i]: {'articles':ARTICLES[i]} for i in range(3)}
    
    
    def __init__(self):
        pass

字典理解是完全有效的,但在运行这段代码时,吐出的错误是:

NameError: name 'LANGUAGES' is not defined

这完全违反直觉。 LANGUAGES 是“原则上”在 var LANG_VARS 之前分配的类变量
现在显然有理由让 python 在构建类时像这样工作。 (见参考问题)。问题是如何解决这个问题。

预期的结果是类有一个变量,如下所示:

LANGUAGES = ['EN','NL']
ARTICLES_EN = ['the','a']
ARTICLES_DE = ['der','das']
ARTICLES_FR = ['le','las']
ARTICLES_NL = ['het','die']
ARTICLES    = [ARTICLES_EN,ARTICLES_NL]

LANG_VARS = {LANGUAGES[i]: {'articles':ARTICLES[i]} for i in range(4)}
LANG_VARS

{'EN': {'articles': ['the','a']},'DE': {'articles': ['der','das']},'FR': {'articles': ['le','las']},'NL': {'articles': ['het','die']}}

谢谢。

请注意,对变量进行硬编码并不是一种理想的选择,因为字典包含一长串变量,而且更容易查看和重新阅读代码以构建如上所示的字典。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...