我对python问题感到难过。我正在编写一个从Scratch(MIT)接收命令的程序,然后应该创建一个新对象,在本例中名为PiLight。只有在收到命令时才需要创建对象,因此它不需要循环,只需重复执行并在每次执行时都有数字增量。由于需要,列表对我不起作用。程序和Scratch之间的谈话。我试图找出构造函数的一种方法,一旦初始化,就打印出类似
的语句class Newpilight:
def __init__(self):
print "Pilight" + pilnumber + " created"
对于第一个对象,第一个对象应该是1个,第二个对象应该是2个
从那里我需要创建对象来改变对象名称中的数字
PiLight(PiLnumber) = Newpilight()
我试着搞乱for循环,但最终弄得一团糟
答案 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