【问题标题】:Python 3.0 - Dynamic Class Instance NamingPython 3.0 - 动态类实例命名
【发布时间】:2011-01-05 20:15:03
【问题描述】:

我想使用 while 循环来初始化具有简单递增命名约定的类对象。目标是能够随意缩放类对象的数量并让程序自动生成名称。 (例如 h1...h100...h1000...)每个 h1,h2,h3... 都是它自己的实例。

这是我的第一次尝试……一直找不到好的例子。

class Korker(object):

     def  __init__(self,ident,roo):
             self.ident = ident
             self.roo = roo


b = 1
hwinit = 'h'
hwstart = 0

while b <= 10:
    showit = 'h' + str(b)
    print(showit)   #showit seems to generate just fine as demonstrated by print
    str(showit) == Korker("test",2)   #this is the line that fails

    b += 1

我得到的错误范围从字符串错误到不能使用函数类型错误......任何帮助将不胜感激。

【问题讨论】:

  • "str(showit) == Korker("test",2) #这是失败的那一行" 首先,你的代码中真的是"=="吗?其次,请发布您实际收到的实际错误消息。第三,你为什么不用字典来做这种事情?
  • 您基本上是在尝试用代码命名变量吗?简短的回答,你不能。
  • 您可能希望将对象存储在列表或字典中。为此目的滥用变量命名空间似乎没有用。
  • @共产鸭:简短的回答应该是:“不要这样做”。这可能的,但可能是不可取的。
  • 为什么不能使用一个叫做h的数组呢?变量将是 h[1]、h[2] 等...

标签: python python-3.x


【解决方案1】:

如果你想生成多个对象,为什么不简单地将它们放在一个数组/散列中,以便以后查找它们:

objects = {}
for b in range(1,11):
    objects['h'+str(b)] = Korker("test", 2)

# then access like this:
objects['h3']

当然,有一些方法可以使名称在本地可用,但这不是一个好主意,除非您知道为什么需要它(通过 globals() 和 locals())。

【讨论】:

    【解决方案2】:

    变量是指向保存数据的对象的名称。您正试图将数据粘贴到变量名称中。这是错误的方法。

    而不是 h1 到 h1000,只需调用变量 h,并使其成为一个列表。然后你得到 h[0] 到 h[999]。

    【讨论】:

      【解决方案3】:

      viraptor 的解决方案略有不同:使用列表。

      h = []
      for i in range(10):
          h.append(Korker("test",2))
      

      事实上,你甚至可以用列表推导式在一行中完成:

      h = [Korker("test", 2) for i in range(10)]
      

      然后您可以通过h[0]h[1] 等来了解它们。

      【讨论】:

        猜你喜欢
        • 2011-08-07
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 1970-01-01
        • 2017-05-02
        • 2014-01-04
        相关资源
        最近更新 更多