这已经让我负担了一段时间,所以我想做的事情可能不是一件好事,所以我需要解决我的问题或建议如何正确地做。
我有一个充满需要转换的数据的电子表格。电子表格可以有 140 或更多列,我希望使其动态化,因此如果有人更改电子表格中的列,它仍然有效。所以我的电子表格可能如下所示:
THISFIELDTHATFIELDTHIRDFIELD
ABCD 123 文本
EFGH 456 其他文本
等等(伙计,在这里做一张 table 很难!)
这很好用,我猜你知道有一个但是即将到来:
class MyThing:
pass
def __init__(self, **kwargs):
for attribute, value in kwargs.iteritems():
setattr(self, attribute, value)
def validate_my_thing(self):
self.ATTRIBUTE = whatever I want to do with that attribute
如果我像这样实例化 MyThing:
new_thing = MyThing(THISFIELD="ABCD", THATFIELD=123, THIRDFIELD="Text")
它工作得很好。所以问题是我想从电子表格中获取属性名称(我可以这样做,我不需要知道如何读取电子表格),并从电子表格中的列填充属性值。如果我可以像这样实例化该类:
new_thing = Mything({"THISFIELD": "ABCD", "THATFIELD": 123, THIRDFIELD: "TEXT"})
那么我的生活就会很轻松。
只是重申一下,实例化该类:
new_thing = MyThing(THISFIELD = worksheet_cell(1,2))
不起作用,就像我说的可能有 140 个属性,而且我不希望实例化是静态的,它必须是动态的。
最佳答案
这样的事情应该有效:
def __init__(self, fields):
for attribute, value in fields.iteritems():
setattr(self, attribute, value)
我所做的只是将参数列表中的 **kwargs
更改为 fields
(因为您传递的是实际的 dict
)。
关于python - 创建具有未知数量属性的类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34418406/