Python OOP,使用循环在创建对象时对其进行编号

时间:2014-07-10 18:12:51

标签: python oop increment

我对python问题感到难过。我正在编写一个从Scratch(MIT)接收命令的程序,然后应该创建一个新对象,在本例中名为PiLight。只有在收到命令时才需要创建对象,因此它不需要循环,只需重复执行并在每次执行时都有数字增量。由于需要,列表对我不起作用。程序和Scratch之间的谈话。我试图找出构造函数的一种方法,一旦初始化,就打印出类似

的语句
class Newpilight:
    def __init__(self):
        print "Pilight" + pilnumber + " created"
对于第一个对象,第一个对象应该是1个,第二个对象应该是2个

从那里我需要创建对象来改变对象名称中的数字

PiLight(PiLnumber) = Newpilight()

我试着搞乱for循环,但最终弄得一团糟

3 个答案:

答案 0 :(得分:2)

使用数字生成器作为类变量

from itertools import count

class NewPilight(object):
    nums = count()
    def __init__(self):
        self.num = self.nums.next()
        print "Pilight {self.num} created".format(self=self)

然后在代码中使用:

>>> pl1 = NewPilight()
Pilight 0 created
>>> pl2 = NewPilight()
Pilight 1 created
>>> pl3 = NewPilight()
Pilight 2 created
>>> pl3.num
2

诀窍是将nums(实际上是数字的生成器,而不是数字列表)作为类属性而不是类实例的属性。这样,它将由所有类实例全局共享。

答案 1 :(得分:1)

class NewPilight:
    def __init__(self, number):
        self.number = number
        print "Pilight" + number + " created"

for x in range(5):
    NewPilight(x)

如果你需要保留对象:

all_pilights = []

for x in range(5):
    all_pilights.append( NewPilight(x) )

现在您可以访问对象

print all_pilights[0].number
print all_pilights[1].number
print all_pilights[2].number

答案 2 :(得分:0)

class NewPiLight(object):
    global_pilnumber = 0 # Since this is on the class definition, it is static

    def __init__(self):
        print "Pilight %s created" % NewPiLight.global_pilnumber
        self.pilnumber = NewPiLight.global_pilnumber # Set the variable for this instance
        NewPiLight.global_pilnumber += 1 # This increments the static variable