我有一个列表myList = [[1, 2], [3, 4], [5, 6]]
,可以使用赋值解包来得到list_instance0, list_instance1, list_instance2 = myList
如果我有课:
class myClass():
def __init__(self, a: int, b: int):
self.a = a
self.b = b
def printAB(self):
return self.a, self.b
现在,如果我想分配list_instance[i]
,我可以做:
classInstance0=myClass(*list_instance0)
classInstance1=myClass(*list_instance1)
classInstance2=myClass(*list_instance2)
如果我去尝试
subClass0, subClass1, subClass2 = myClass(*list_instance0, *list_instance1, *list_instance2)
# error "myClass" is not iterable: __iter__ method not defined
因此,我想知道是否有一种方法可以以更动态的方式将classInstance[i]
与list_instance[i]
一起分配给myClass
,而不必单独分配每一个?
4条答案
按热度按时间whitzsjs1#
您只需要在列表上Map
MyClass
。starmap
确保每个子列表的 contents 作为单独的参数传递给myClass
,而不是子列表本身作为单个参数传递。或者你可以使用列表解析来更明确一点:
bpsygsoo2#
这是一个有趣的问题。老实说,我根本不相信有一种方法可以自动地将子列表分解成一个类示例。
下面的代码,我不知道它在Python中是否有效:
我建议定义一个helper类方法
from_list
,在给定列表my_list
的情况下,自动创建类对象的可迭代对象:完整的用法如下,当类示例被
print
艾德时,使用dataclasses
模块以获得更好的输出:输出:
bihw5rsg3#
我想你误解了继承。你调用sublcass的项不是myClass的 subclasses。它们是myClass的 instances。所以简短的回答是no。为myClass调用构造函数返回单个对象。也就是说,myClass的一个示例。所以它不能被赋值给3个对象或一个可迭代对象,因为它返回单个对象。
46scxncf4#
对
myClass
构造函数的一次调用返回三个myClass
示例是没有意义的(从技术上讲,您可以通过对__new__
执行一些奇怪的操作来实现这一点,但请不要这样做)。我认为,您需要的是某种工厂函数,它接受一系列init参数并为您提供一系列示例,因为你可以按照你想要的方式去解构它。例如:注意,你调用的变量
subClass
* 不是子类 *,它们是myClass
的 * 示例 *。