簡體   English   中英

Python OOP,使用循環為對象創建編號

[英]Python OOP, using loops to number objects as they are created

我對python問題感到困惑。 我正在編寫一個程序,該程序從Scratch(MIT)接收命令,然后創建一個新對象,在本例中為PiLight。 僅在接收到命令時才需要創建對象,因此不必循環,只需能夠重復執行並在每次執行時增加編號即可。由於以下要求,列表對我不起作用該程序和Scratch之間的對話。 我試圖找出一種構造函數,一旦初始化,就可以打印出類似

class Newpilight:
    def __init__(self):
        print "Pilight" + pilnumber + " created"

pilnumber對於第一個對象應為1,對於第二個對象應為2,依此類推

從那里我需要創建對象來更改對象名稱中的數字

PiLight(PiLnumber) = Newpilight()

我試着用for循環弄亂了東西,但最后卻弄得更糟

使用數字生成器作為類變量

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 (實際上是數字的生成器,而不是數字列表)作為類屬性,而不是類實例的屬性。 這樣,所有類實例都可以全局共享它。

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
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM