【发布时间】:2020-06-14 05:27:34
【问题描述】:
我正在为基于代理的模型创建一个框架,并且我有一个名为代理的类。由于模拟中将有数千个代理,我想使用 __slot__,它将替换默认的 __dict__ 并减少内存消耗。我对代码进行了结构化,以便它从数据表中获取代理的参数,并且我想将存储在表中的值分配给具有表头名称的属性。
如果下面是数据表,
|代理名 |位置 |属性 1 | attr2 | |---------------|------------|-------------|------- -----| |代理史密斯|纽约 |一些价值|一些价值| |新 |纽约 |一些价值|一些价值| |墨菲斯 |锡安 |一些价值|一些价值|如果我创建 3 个代理,我希望它们都具有 .agent_name、.location、.attr1 和 .attr2 属性。
# illustration of what I want
header_of_table = ["agent_name", "location", "attr1", "attr2"]
class agent:
__slots__ = header_of_table
def __init__(self, values_in_row):
# what I ideally want, I know this syntax doesnt work, but this is to get the idea across
for slotted_attribute, value in zip(self.__slots__, values_in_row):
self.slotted_attribute = value
我知道你可以在 for 循环中使用 .eval 方法,但我觉得不是很干净,我觉得必须有更好的方法。我想知道是否有一种方法可以遍历插槽并为每个属性分配值。
【问题讨论】:
-
有“setattr”。
-
应该读到这个:stackoverflow.com/questions/472000/usage-of-slots 例如,它说你的类需要从
object继承。也是__slots__不是__slot__ -
如果我没记错的话,你不需要在 Python 3 中显式继承
object。 -
@mandera 是的,我在第一段中有插槽,但其余的是插槽。我替换了所有这些错别字。