【问题标题】:class property not recognized when imported导入时无法识别类属性
【发布时间】:2014-06-19 16:59:56
【问题描述】:

我遇到了一个问题,即导入的类无法识别其自身的某些属性。下面介绍stringmanager.py中的类

    class String_Manager:
        def __init__(self):
            self.jsonformat = None
            self.createjsonformat()


        def createjsonformat(self)
            with open("formatefile.json") as f:
                self.jsonformat = json.load(f)
            self.jsonformat["Server"] = "Server"
            self.jsonformat["Payload"] = "Payload"
            return copy.deepcopy(self.jsonformat)

    stringManager = String_Manager()

在其他地方导入了 stringManager

    from stringmanager import stringManager
    uploadtype = stringManager.jsonformat

但我收到一条错误消息: “AttributeError:'String_Manager' 对象没有属性 'jsonformat'。我看过的其他示例将此归因于制表符和空格混合的不正确继承。然而,我正在使用的这个代码库不使用父类并遵守 PEP8标准,因此没有制表符/空格组合。从另一个 python 文件导入对象时,是否需要遵循其他程序?

【问题讨论】:

  • 请发布您尝​​试过的代码的实际 sn-p。这显然不是一个真实的例子,因为stringManger 中有一个错字。由于您没有发布您实际尝试过的真实示例,因此不清楚您是在导入stringManager 实例还是String_Manger 类。

标签: python class import


【解决方案1】:

由于你的类的jsonformat 属性是在__init__ 函数上创建的,它只会存在于你的类的初始化实例上,而不是纯类对象。你需要uploadtype = String_Manager().jsonformat 才能工作。

编辑:已正确指出 OP 正在尝试导入实例本身,在这种情况下,我的回答并不真正适用。但是,我无法重现该问题,尽管原始代码存在问题,其中 jsonformat 应定义为字典而不是 None,否则 createjsonformat 方法将失败。

【讨论】:

  • 但是他将String_Manager对象实例化为stringManager,然后将该对象导入
  • @wnnmaw,这就是 OP 他正在做的,但由于他的代码包含一个简单的错字,这会导致 不同错误,我们不知道这是不是他真正在做的事情。
  • @Dan 感谢您指出我的拼写错误,并且很抱歉我无法发布原始代码。如您所见,我是 stackoverflow 社区的新手,目前不知道这是强制性的。 wnnmaw 在他提到我正在尝试导入实例化对象时是正确的。
  • 即使您无法发布原始代码,也请发布一个完整、简单的示例,该示例会产生与您描述的问题类似的问题(作为奖励,您可能会弄清楚如何一路解决你自己的问题!)。您遇到的错误与您实际发布的代码没有任何意义;我试过了,一旦拼写得到修复,它就会按预期工作。所以这让我们试图猜测您的实际代码与您发布的代码有何不同。
  • 我找到的解决方案是手动调用填充“self.jsonformat”的辅助函数,由于某种原因,它们在实例化 stringManager 对象时不会自动执行。我的印象是,当调用 String_Manager() 时会执行 init 函数,但在我的情况下,嵌套在 init 中的函数没有被执行。不知道为什么...
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 2022-11-26
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-01
  • 2023-03-31
相关资源
最近更新 更多