因为我是stackoverflow社区的新手,所以我不知道是否应该将此作为一个新问题或我在此问error with appending to a file and using an array的问题的延续。
基本上相同的代码只有一个额外的行:
class component(object):
def __init__(self,
name = None,
height = None,
width = None):
self.name = name
self.height = height
self.width = width
class system(object):
def __init__(self,
name = None,
lines = None,
*component,
**kwargs):
self.name = kwargs.get('name')
self.component = component
self.lines = kwargs.get('lines') or []
def writeTOFile(self,*component):
self.component = component
line =" "
self.lines.append(line)
line= "#----------------------------------------- SYSTEM ---------------------------------------#"
self.lines.append(line)
line = "Width = %d" % component.width
self.lines.append(line)
def writeFile(self):
ef = open('file1.d', 'w')
ef.write('\n'.join(self.lines))
ef.close()
Component1 = component ( name = 'C1',
height = 500,
width = 400)
Component2 = component ( name = 'C2',
height = 600,
width = 700)
Component_list = [Component1, Component2]
system1 = system(Component_list)
system1.writeTOFile(Component_list)
system1.writeFile()
我添加的这一行是:
line = "Width = %d" % component.width
self.lines.append(line)
我得到的错误是:
Traceback (most recent call last):
File "C:\Python27\Work\trial2.py", line 55, in <module>
system1.writeTOFile(Component_list)
File "C:\Python27\Work\trial2.py", line 37, in writeTOFile
line = "Width = %d" % component.width
AttributeError: 'tuple' object has no attribute 'width'
类组件显然有一个名为width的属性,所以我不明白为什么会出现这个错误。 我知道组件是一个组件数组,所以这可能是原因...但我尝试在(组件)范围内使用for,但显然我缺乏使其工作的技能。 提前谢谢。
答案 0 :(得分:0)
参数 * component 是一个元组。此外,您传递给writeToFile一个组件列表,而在您的方法中,您使用传递的参数作为组件。
for x in component:
for c in x:
line = "width = %d" % c.width
self.lines.append(line)
答案 1 :(得分:0)
你的问题是:
Component_list = [Component1, Component2]
system1 = system(Component_list)
结合这个:
def __init__(self,
name = None,
lines = None,
*component,
**kwargs):
要么取消__init__
中的星标,要么
system1 = system(Component1, Component2)
不先将它们分组到列表中。
此外,您的__init__
再次出错,您已撤消我在回答您上一个问题时建议的更改。你需要它看起来像:
def __init__(self, *component, **kwargs):
self.name = kwargs.get('name')
self.component = component
self.lines = kwargs.get('lines', [])
如果您将*
放入列表中,则或没有component
的情况相同。
然后,而不是
def writeTOFile(self,*component):
self.component = component
只是做
def writeTOFile(self):
因为您已在component
中将self
添加到__init__
。
然后,而不是
line = "Width = %d" % component.width
self.lines.append(line)
DO
for component in components:
line = "Width = %d" % component.width
self.lines.append(line)
一切都应该有效。