【问题标题】:Importing objects from another python file as a list将另一个 python 文件中的对象作为列表导入
【发布时间】:2019-02-17 01:17:46
【问题描述】:

我有一个文件 (Crop_Library.py),其中包含具有各种属性的对象列表(所有属性相同):

from Crop import Crop

Basil = Crop("Basil", 3, 0, 5, 10, 5)
Lettuce = Crop("Lettuce", 3, 4, 5, 10, 7)
Kale = Crop("Kale", 1, 2, 3, 4, 5)

我想让我的 GUI 程序 (GUI.py) 读取 Crop_Library.py 中的所有对象并将它们存储在一个列表中,以便我的 GUI 可以在组合框中列出它们(因此它们也需要转换为字符串,或者只是读取crop.name 字符串,这是所有属性的第一个属性)。

目前,导入是个问题。但是,作为一个仅供参考,我想在将来向我的 GUI 的另一部分添加编辑功能,以便可以创建/编辑/删除对象。如果这是一种更好的方法,我愿意使用 json 文件而不是 python 文件来存储这些对象 - 我是 python 新手,只是非常迷茫,因此感谢任何指导。

提前致谢!

【问题讨论】:

    标签: python import pycharm


    【解决方案1】:

    如果您使用 JSON,您读取的内容将不是 Crop 对象。您可以在读取数据后将输入转换为 Crop 对象。

    在导入您所拥有的物品时,您可以通过以下方式获得一份清单:

    from Crop import Crop
    
    Basil = Crop("Basil", 3, 0, 5, 10, 5)
    Lettuce = Crop("Lettuce", 3, 4, 5, 10, 7)
    Kale = Crop("Kale", 1, 2, 3, 4, 5)
    
    crops = [ Basil, Lettuce, Kale ]
    

    或者更简洁地说,如果您不需要对象名称,那么您不应该...

    from Crop import Crop
    
    crops = [
        Crop("Basil", 3, 0, 5, 10, 5),
        Crop("Lettuce", 3, 4, 5, 10, 7),
        Crop("Kale", 1, 2, 3, 4, 5,)
    ]
    

    顺便说一句,根据正确的 Python 命名约定,您的 Crop 对象名称应为小写。

    【讨论】:

    • 嗨乔,感谢您的回复!我仍然无法找到一种方法让我的代码在该作物对象列表中自动创建一个仅包含作物名称的列表。我现在需要的是一个列表,就像你的第一个示例的最后一行一样,但是自动创建的,因为我将添加从该列表中编辑/添加/删除的功能,但需要我的组合框来读取当前的内容农作物清单。
    • 看看泡菜。 Pickling 是一种序列化(变成字节流)任意 Python 对象的方法,而不仅仅是 dicts、lists 和 sets。看看这个:thepythoncorner.com/2016/12/object-serialization-in-python/…。因此,您可以让您的用户建立列表,然后将其腌制到数据文件中。然后,当用户再次运行您的应用时,您可以 Unpickle 数据文件以重建内存列表。
    • 我不知道这是最好的方法,但编写生成与我们一直在使用的 Python 输入文件等效的代码不会太难。因此,您需要编写特殊代码来将列表序列化为 Python 代码,然后您只需导入文件以将其读回。还有其他方法可以做到这一点。健壮应用程序的一种常见方法是让您的每个对象都知道如何生成其自身的序列化(字节或字符流)表示,并能够从这种表示中重构自己。
    • 最后一件事的一个具体方法是让您的对象能够将自己表示为列表、字典和集合的内存结构。然后可以使用 Python JSON 库在该结构中存储和读回,您可以编写代码将该内存结构转换为实际的对象列表。 PS:如果你能接受这个答案,我可以得到一些分数,那就太好了。
    • 嗨,乔,我会继续接受这一点,并根据您的一些建议进行工作。非常感谢您的所有意见!
    猜你喜欢
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多