python - 创建具有未知数量属性的类实例

标签 python class instantiation

这已经让我负担了一段时间,所以我想做的事情可能不是一件好事,所以我需要解决我的问题或建议如何正确地做。

我有一个充满需要转换的数据的电子表格。电子表格可以有 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/

相关文章:

python - 这个算法会运行多少次?

java - Number 类中的抽象方法

ruby - 我可以在检查时获得传递给类中的 attr_accessor 的符号列表吗?

c++ - 循环遍历 C++ 类的对象

c++ - 使用 QMetaType 的反射(按名称实例化类)

c# - 全局变量丢失导致函数分配失败

python - 如何修复 Tensorflow 中的 "IndexError: list index out of range"

python - 如何在Python中随机选择图像并将它们放入多个文件夹

python - Python 中 Tkinter 中的滚动条仅在悬停滚动条时才起作用

c# - 实例化的类对于每个用户来说都是唯一的吗?