【问题标题】:Is it possible to programmatically define identifiers using string data in Python?是否可以在 Python 中使用字符串数据以编程方式定义标识符?
【发布时间】:2022-11-24 11:23:36
【问题描述】:

假设我有一个名为 Circuit 的类,以及一个包含每个电路组件数据的字典:

components = {
    'V1': [ ... ], 
    'L1': [ ... ], 
    'R1': [ ... ], 
    'R2': [ ... ], 
    ...
}

我想定义子对象Circuit.V1Circuit.L1,等等。

问题的关键是我有字符串(“V1”,“L1”,...)需要转换成标识符。必要的标识符会有所不同,具体取决于传递给 Circuit 的构造函数的数据,所以我不能只对它们进行硬编码。

这可能吗?如果可以,我该怎么做?

我一直没能找到关于此的任何信息(搜索只会显示有关有效标识符名称等的基本信息)。我找到了this page,但问题从未得到直接回答。

现在我可以访问我的电路组件对象,如Circuit.components['V1'],但这看起来有点笨拙,我更喜欢Circuit.V1

【问题讨论】:

    标签: python syntax identifier


    【解决方案1】:

    如果我们想要像 Circuit.V1 这样的视图,您将创建类并创建类的对象。像:

    class Component:
        V1 = 0
        ... 
    
    Circuit = Component() 
    Circuit.V1 = 2
    

    但谁这样做是为了“美”呢?

    【讨论】:

      【解决方案2】:

      虽然不推荐,但您可以使用__setattr__ dunder 方法:

      class C:
          ...
      
      c = C()
      
      c.__setattr__("V1", 1)
      
      print("c.V1 = ", c.V1) # c.V1 = 1
      
      

      原则上这是可行的,但是如果你想在运行时定义属性(你事先不知道属性的名称)为什么要把它们当作属性?我认为您的字典方法更适合您的用例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-15
        • 2019-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多