【问题标题】:Python Create different variable names and instances for the same classPython 为同一个类创建不同的变量名和实例
【发布时间】:2017-04-28 09:18:49
【问题描述】:

我正在尝试创建变量名称,例如:

event1
event2
event3

为同一类的不同实例命名。

我在网上搜索,很多人都在推荐字典。但据我所知,字典只适用于配对。我想命名同一个类的不同实例,例如:

class Event:
  def __init__(self, description):
    self.__description = description

event1 = Event('This is event 1')
event2 = Event('This is event 2')
event3 = Event('This is event 3')

有人知道我该怎么做吗? 提前致谢。

编辑 1:

看来我的问题还不够清楚。 我不知道需要多少实例。我将读取文件的长度(文件中的行数),然后创建类的实例。

编辑 2:

我有多条信息要填写课程。例如:

class Event:
  def __init__(self, name, description, value):
    self.__name = name
    self.__description = description
    self.__value = value

event1 = Event('This is event 1', 'Tom eats apple', '20')
event2 = Event('This is event 2', 'Jerry eats pie', '10')
#......
#(maybe 20 or more)

【问题讨论】:

  • 有什么问题?你的意思是你想要超过 3 个实例?
  • 您解决了自己的问题。你想做什么?
  • 是的,不止 3 个实例。设计是读取一个文件,找出该文件有多长,并根据需要创建尽可能多的类实例。
  • 提供给每个实例的值从何而来?如果它是一个列表,那么您可以将您的实例存储在一个列表中。
  • 我不知道会有多少实例。也许 10,也许 100。我想根据需要生成尽可能多的变量名。

标签: python python-3.x variables


【解决方案1】:

要动态创建多个实例,一种解决方案是使用如下字典:

class Event:
  def __init__(self, description):
    self.__description = description


events = {}

num_events = 5 # Or whatever

for i in range(num_events):
    events['event{}'.format(i + 1)] = Event('This is event {}'.format(i + 1))

输出:

>>> events
{'event4': <__main__.Event instance at 0x02F70E40>, 'event5': <__main__.Event instance at 0x02F70DF0>, 'event2': <__main__.Event instance at 0x02F70DA0>, 'event3': <__main__.Event
instance at 0x02F70D50>, 'event1': <__main__.Event instance at 0x02F70C60>}

【讨论】:

    【解决方案2】:

    这是一个类:

    class Event:
        def __init__(self, description):
        self.__description = description
    

    现在我们要创建此类的n 实例,使用从多个列表中获得的条目:

    entries_a = ['input 1', 'input 2', 'input 3']
    entries_b = ['something 1', 'something 2', 'something 3']
    entries_c = ['a', 'b', 'c']
    

    这是我们如何组合所有条目(必须具有相同的长度)。

    entries = zip(entries_a, entries_b, entries_c)
    

    下面是我们如何为entries 创建该类的实例:

    instances =  [Event(val_a, val_b, val_c) for val_a, val_b, val_c in entries]
    

    或使用字典:

    instances = {(val_a, val_b, val_c): Event(val_a, val_b, val_c) for item in entries}
    

    【讨论】:

      【解决方案3】:

      使用列表:

      class Event:
        def __init__(self, description):
          self.__description = description
      
      event = []
      event.append(Event('This is event 0'))
      event.append(Event('This is event 1'))
      event.append(Event('This is event 2'))
      ...
      

      因此您可以存储任意数量的实例,而无需事先知道有多少。

      字典的解决方法类似:

      event = {}
      event[1] = Event('This is event 1')
      event[2] = Event('This is event 2')
      event[3] = Event('This is event 3')
      ...
      

      event = {}
      event['a'] = Event('This is event A')
      event['b'] = Event('This is event B')
      event['c'] = Event('This is event C')
      ...
      

      取决于您要如何识别它们。

      【讨论】:

      • 这是对实例的硬编码......他们说实例的数量是未知的。
      • 啊,所以字典也可以存储类?
      • 有效!我认为字典解决方案是要走的路,非常感谢!
      • Pouria:我们不知道在创建时是否知道实例总数。所以我提供了如何将实例添加到列表或字典的示例。如果 OP 理解这一点,他/她可以在列表/字典理解中使用这些原则。 SamTulster:是的,您可以引用列表或字典中的任何变量。 (在某些情况下您甚至可以将它们用作键。)
      • 那是硬编码材料 - 不是编程中的有效解决方案。此外,字典键必须是不可变的。您不能将可变对象用作字典键。
      猜你喜欢
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多