สมมติว่าฉันมีคลาสที่มีคอนสตรัคเตอร์ (หรือฟังก์ชันอื่น ๆ ) ที่รับอาร์กิวเมนต์จำนวนตัวแปรแล้วตั้งค่าเป็นคลาสแอ็ตทริบิวต์ตามเงื่อนไข
ฉันสามารถตั้งค่าได้ด้วยตนเอง แต่ดูเหมือนว่าพารามิเตอร์ตัวแปรจะเป็นเรื่องธรรมดามากพอใน python ที่ควรมีสำนวนทั่วไปสำหรับการทำเช่นนี้ แต่ฉันไม่แน่ใจว่าจะทำแบบไดนามิกได้อย่างไร
ฉันมีตัวอย่างการใช้ eval แต่แทบจะไม่ปลอดภัย ฉันต้องการทราบวิธีที่เหมาะสมในการทำเช่นนี้ - อาจใช้แลมด้า?
class Foo:
def setAllManually(self, a=None, b=None, c=None):
if a!=None:
self.a = a
if b!=None:
self.b = b
if c!=None:
self.c = c
def setAllWithEval(self, **kwargs):
for key in **kwargs:
if kwargs[param] != None
eval("self." + key + "=" + kwargs[param])
pip install attrsตกแต่งชั้นเรียนของคุณด้วย@attr.sและตั้ง args เป็นa = attr.ib(); b = attr.ib()ฯลฯ อ่านรายละเอียดเพิ่มเติมที่นี่