写类属性时的元组错误

时间:2011-08-19 06:54:21

标签: python tuples

因为我是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,但显然我缺乏使其工作的技能。 提前谢谢。

2 个答案:

答案 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)

一切都应该有效。