【问题标题】:How can you pass a user configurable dict into a class instance如何将用户可配置的 dict 传递给类实例
【发布时间】:2020-10-23 19:57:37
【问题描述】:

我有一个创建对象的类,允许我访问实验相机系统的属性。我有一些配置属性保存在字典中,用于某些相机最初应该位于的位置。由于这些初始设置可能会有所不同,因此我无法将它们硬编码到类中,而是需要将它们分开放在我使用 json 库访问的文本文件中。

有没有办法将 dict 传递给一个类,以便可以使用它的键值对?

简化代码

import any_dict_01
import json

data = any_dict_01


class dummy(data):

    def __init__(self):
        self.data = data


    def getDict(self):
        print(self.data)


a = dummy()
a.getDict()

工作代码

根据 karl 在 cmets 中的提示和建议,我想出了如何做到这一点(我希望 karl 将他的 cmets 作为答案,以便我可以接受)。

import json


data = 'my_rig.txt'


class dummy:

    def __init__(self, data):
        self.data = data


    def getDict(self):
        with open(data) as json_file:
        data = json.load(json_file)
        print(data)


a =dummy()
theDict = a.getDict(data)

【问题讨论】:

  • 你快到了。一个典型的构造函数看起来像def __init__(self, data): self.data = data
  • class dummy(data): -> class Dummy:
  • data = any_dict_01 not 使data 成为any_dict_01 模块定义的任何特定dict。它使data 成为同一模块另一个名称
  • 无论如何,这个问题与课程无关。 init 方法获取信息的方式与任何普通函数获取信息的方式相同:通过给它一个参数,并且将信息作为参数传递。
  • @KarlKnechtel 如果您将其作为答案,合并的 2 个 cmets 我将接受它,因为我编写了一些有效的代码,谢谢。

标签: python class dictionary oop text-files


【解决方案1】:

根据要求:

data = any_dict_01 确实 not 使data 成为any_dict_01 模块定义的任何特定字典。它使data 成为同一个模块另一个名称

无论如何,这个问题与课程无关。将信息获取到__init__ 方法的方式与将信息获取到任何普通函数的方式相同:通过给它一个参数,并将信息作为一个参数

【讨论】:

    【解决方案2】:

    您的代码可以通过像这样修复最后一部分来工作:

       def __init__(self, data):
          self.data = data
    
       def getDict(self):
          return self.data
    
    a = dummy(data)
    theDict=a.getDict()
    

    您可以使用点表示法使 dict 可访问,就好像它是一个类实例 like this

    【讨论】:

    • (OP 实际上也需要更改其构造函数)
    【解决方案3】:
    class dummy:
        def __init__(self, my_dict):
            self.my_dict = my_dict
    

    【讨论】:

      猜你喜欢
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      相关资源
      最近更新 更多