【发布时间】:2021-04-16 02:50:51
【问题描述】:
我尝试将一个类列表附加到另一个类列表中,如下面的代码。
class Power:
def __init__(power, name='VDD', value='1.8'):
| power.name = name
| power.value = value
class Condition:
def __init__(condition, name='TYP', power=[]):
| condition.name = name
| condition.power = power
def addpower(condition, power, value):
| condition.power.append( Power( name=power, value=value ) )
class WorkingCell:
def __init__(cell, name='name', cond=[]):
| cell.name = name
| cell.cond = cond
def setpower(cell, cond, power, value):
| for x in cell.cond:
| ¦ if( x.name == cond ):
| ¦ ┆ x.addpower( power=power, value=value )
| ¦ ┆ break
我在单元格中添加了两个条件,如下所示。
cell.cond.append( Condition( name='FAST' ) )
cell.cond.append( Condition( name='SLOW' ) )
之后,我根据条件名称将两个 Power 类的元素附加到单独的条件中。
cell.setpower( cond='FAST', power='VDD', value='0.9' )
cell.setpower( cond='FAST', power='VCCQ', value='1.9' )
cell.setpower( cond='SLOW', power='VDD', value='0.65' )
cell.setpower( cond='SLOW', power='VCCQ', value='1.65' )
因此,它也被附加到两个条件中(我自己格式化了打印输出的结果以便于调试)。
{name : 'cell_1',
cond : {name : 'FAST', power : {name : 'VDD', value : '0,9'
name : 'VCCQ', value : '1.9'
name : 'VDD', value : '0.65'
name : 'VCCQ', value : '1.65'}
name : 'SLOW', power : {name : 'VDD', value : '0,9'
name : 'VCCQ', value : '1.9'
name : 'VDD', value : '0.65'
name : 'VCCQ', value : '1.65'}
}
}
然后,我通过所有 Power 对象存储的地址检查了它。令人惊讶的是,两个单独条件的所有幂都存储在同一个地址中。
{name : 'cell_1',
cond : {name : 'FAST', power : {<__main__.Power object at 0x2b0d6d906c88>
<__main__.Power object at 0x2b0d6d906d68>
<__main__.Power object at 0x2b0d6d906da0>
<__main__.Power object at 0x2b0d6d906e10>}
name : 'SLOW', power : {<__main__.Power object at 0x2b0d6d906c88>
<__main__.Power object at 0x2b0d6d906d68>
<__main__.Power object at 0x2b0d6d906da0>
<__main__.Power object at 0x2b0d6d906e10>}
}
}
我想知道为什么我已经根据自己的名称访问了各个条件,但它仍然将 Power 对象附加到两个条件中。
编辑: 作为 Aagam Sheth,我错过了解释我的预期输出。因此,下面的描述是一个。
{name : 'cell_1',
cond : {name : 'FAST', power : {name : 'VDD', value : '0,9'
name : 'VCCQ', value : '1.9'}
name : 'SLOW', power : {name : 'VDD', value : '0.65'
name : 'VCCQ', value : '1.65'}
}
}
【问题讨论】:
-
你能提供预期的输出吗?以及您是如何获得打印结果的。
-
亲爱的@AagamSheth,我添加了我的预期输出作为您的要求。但是,正如我上面提到的,我对输出进行了格式化以更清楚地解释它。我自己的代码有更多的数据要显示,并且描述所有内容更复杂,而不是专注于我上面编辑的代码以更清楚地显示问题。然而,我使用
attrs=vars(cell)和attrs=vars(cell.cond)来转换所有项目。然后,我使用print( ', '.join("%s: %s" % item for item in attrs.items()))将它们打印出来。 -
@ĐứcMinhPhạm 我在下面编辑了我的答案。它用 attrs=var(cell.cond) 解决了你的问题。问题在于您提供了可变默认参数列表的 init 方法。请按照我的回答中所述进行更改