我想為 LED 燈條創建一個 Micropython 類。初始化時,可以使用任意數量的 color=Pin 對呼叫該類。所以我的想法是呼叫def __init__(self, **kwargs)然后使用:
for color, pin in kwargs.items():
setattr(self, color, PWM(Pin(pin)))
我想稍后參考(例如,用 更改 PWM 值self.color.duty()。我的問題是,我不知道,如何創建所有已創建屬性的任何型別的串列,以便我以后可以遍歷它們。考慮類似:
for color in color_list:
color.duty(number_gained_via_mqtt)
但是如何將創建的屬性放入這個“color_list”中?
更新
感謝您的第一個答案!問題是,一個簡單的鍵串列并不能解決我的問題。我不能呼叫 self.key_from_list (據我所知)。
例如,如果我從鍵創建一個串列,color_list=["r","g","b","w"]我不能(或不知道如何)遍歷它們。
for color in color_list:
self.color.duty(0)
將不起作用,因為該串列僅包含字串而我不知道如何使用該名稱呼叫我的類的屬性(如果有任何意義)
完整代碼如下所示:
class Stripe():
def __init__(self, **kwargs):
self.on = 1
self.leds = dict()
for key, value in kwargs.items():
setattr(self, key, PWM(Pin(value)))
self.leds[key] = 255
def display(self):
if self.on:
for key in self.leds:
self.key.duty(self.leds.get(key)) # does not work
else:
for key in self.leds:
self.key.duty(0) # does not work either
更新 2 - 已解決
謝謝你們的答案。使用字典而不是屬性可以解決這個問題。
uj5u.com熱心網友回復:
由于您的顏色是 的鍵kwargs,這是一個常規字典,您可以這樣做
self.color_list = list(kwargs.keys())
然后你可以將它們稱為
for color in self.color_list:
getattr(self, color).duty(number_gained_via_mqtt)
如果您只想要 PWM 物件的串列,您也可以這樣做:
self.color_list = []
for color, pin in kwargs.items():
pwm = PWM(Pin(pin))
setattr(self, color, pwm)
self.color_list.append(pwm)
然后你可以做
for color in self.color_list:
color.duty(number_gained_via_mqtt)
更好的選擇可能是將所有內容存盤到字典中,而不是將__dict__所有屬性混合在一起的實體:
self.colors = {color: PWM(Pin(pin)) for color, pin kwargs.items()}
然后你可以更簡單地訪問它:
for pin in self.colors.values():
pin.duty(number_gained_via_mqtt)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/380221.html
