【问题标题】:Python Class With Lots of Instances具有大量实例的 Python 类
【发布时间】:2021-03-25 15:05:02
【问题描述】:

我需要定义一个类和许多实例(超过 30 个,但代码中给出了其中的 3 个)以便能够在 python 模块文件之间共享它们。我对以下代码有疑问(简化):

class class1:
    def __init__(self, var1):
        self.var1 = var1

    def read_file():
        try:
            f = open('/file1.txt')
            read_text = f.readlines()
            abc1 = class1((read_text[0]))
            abc2 = class1((read_text[1]))
            abc3 = class1((read_text[2]))
    
        except:
            abc1 = class1("text_1")
            abc2 = class1("text_2")
            abc3 = class1("text_3")


class1.read_file()

def1 = class1("abc")
def2 = class1("def")
def3 = class1("hjk")

print(def1.var1)
print(abc1.var1)
print(abc2.var1)

它给出了错误:

NameError: name 'abc1' is not defined

我试图在类中定义实例以避免为它们定义实例并使代码变长。

通过类定义超过 30 个实例的 Python 方法是什么? 在类中定义实例的解决方案是什么?

file1.txt 的内容:

a
b
c
d
e

【问题讨论】:

  • 在你的打印语句中abc1abc2 应该是def2def3,我想? abc{1,2,3} 只能在方法class1.read_file() 中使用,其他地方都没有。
  • abc1 等只存在于函数的范围内,你试图在它不退出的函数之外引用它
  • @Alex,不,它们是不同的东西。
  • 正如克里斯所说,变量abc1abc2abc3仅在read_file函数中可用。除非您将它们设为class1 的属性,否则您无法像这样访问它们,但它们本身就不是class1 的实例。
  • @Alex,对于一个类中超过 30 个的实例,您有什么建议以使代码更加 Pythonic? (我有很多 python 模块文件,也会有很多类和实例将在模块之间共享。我会将面向函数的代码转换为类代码。)

标签: python python-3.x class instance


【解决方案1】:

这有帮助吗:

class MyClass:

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


with open('/file1.txt') as f:
    objects = [MyClass(line) for line in f]

print(objects[0].var)
print(objects[1].var)

(让我们给班级起个 PEP8 名字) 要定义“pythonic 方式的许多实例”,您可能需要使用列表理解。

【讨论】:

  • 据我了解,以这种方式定义实例是正确的方法。我对吗? (我的意思是在我的第一篇文章和你的回答中都使用这种结构。)我会接受这个作为答案,因为它回答了我的一个问题。
  • 是的,正确的。这就是如何基于多个输入(这里是文件行)创建多个实例
猜你喜欢
  • 2015-05-29
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多