问题描述
class Foobar():
def __init__(self,path,scale,baz):
self.path = path
self.scale = scale
self.baz = baz
我试过这个:
listobj = [objA,objB,objC] = [Foobar("/picture_foobar.png",0.5,baz=MAX_CST)]*3
或
objA,objC = 3*Foobar("/picture_foobar.png",baz=MAX_CST)
我得到了:
TypeError: unhashable type: 'list'
还有:
TypeError: unsupported operand type(s) for *: 'int' and 'Foobar'
解决方法
您不能在这里使用 list
乘法,因为这会使 相同 对象(即 objA is objB is objC
、并更改一个名称,例如 objA.scale = 0.75
,将更改所有名称)。你能做的最好的事情是:
objA,objB,objC = [Foobar("/picture_foobar.png",0.5,baz=MAX_CST) for _ in range(3)]
它使用一个简单的 listcomp 来构造三个不同的 Foobar
(具有相同的参数),然后将其解包到所讨论的三个对象中的每一个。如果您还需要 list
本身,您可以这样做:
objA,objC = listobj = [Foobar("/picture_foobar.png",baz=MAX_CST) for _ in range(3)]
但请注意,listobj
的内容将是您解压到的命名对象的别名(例如 listobj[0] is objA
、listobj[1] is objB
等)。