附加到文件并使用数组时出错
我写了这段代码:
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):
self.name = name
self.component = component
if lines is None:
self.lines = []
else:
self.lines = lines
def writeTOFile(self,
*component):
self.component = component
line =" "
self.lines.append(line)
line= "#----------------------------------------- SYSTEM ---------------------------------------#"
self.lines.append(line)
Component1 = component ( name = 'C1',
height = 500,
width = 400)
Component2 = component ( name = 'C2',
height = 600,
width = 700)
system1 = system(Component1, Component2)
system1.writeTOFile(Component1, Component2)
并且收到错误:
Traceback (most recent call last):
File "C:\Python27\Work\trial2.py", line 46, in <module>
system1.writeTOFile(Component1, Component2)
File "C:\Python27\Work\trial2.py", line 32, in writeTOFile
self.lines.append(line)
AttributeError: 'component' object has no attribute 'append'
而且我真的不知道如何修复它。
还有一种方法可以将我的 system1 定义为 system(Component) ,其中 component = [Component1, Component2, ...Componentn] ?
提前致谢
I have written this code:
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):
self.name = name
self.component = component
if lines is None:
self.lines = []
else:
self.lines = lines
def writeTOFile(self,
*component):
self.component = component
line =" "
self.lines.append(line)
line= "#----------------------------------------- SYSTEM ---------------------------------------#"
self.lines.append(line)
Component1 = component ( name = 'C1',
height = 500,
width = 400)
Component2 = component ( name = 'C2',
height = 600,
width = 700)
system1 = system(Component1, Component2)
system1.writeTOFile(Component1, Component2)
and I get the error :
Traceback (most recent call last):
File "C:\Python27\Work\trial2.py", line 46, in <module>
system1.writeTOFile(Component1, Component2)
File "C:\Python27\Work\trial2.py", line 32, in writeTOFile
self.lines.append(line)
AttributeError: 'component' object has no attribute 'append'
And I don't really know how to fix it.
Also is there a way for defining my system1 as system(Component) where component = [Component1, Component2, ...Componentn] ?
Thanks in adavance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的
__init__
中出现了一些乱七八糟的情况:会起作用。您需要将
lines
和name
放在收集组件的*
项之后。在 Python 2 中,您不能在
*
之后使用命名属性,因此您需要使用**kwargs
和get('name')< /code> 和
get('lines')
来自kwargs
。如果您不提供默认值,
get
仅返回None
,因此您将在此处获得self.name = None
。如果你想指定一个默认名称,你可以像我对
lines
所做的那样。You've got things out of order in your
__init__
:Will work. You need
lines
andname
to be after the*
item that collects the component.In Python 2, you can't then have named attributes after a
*
, so you need to instead use**kwargs
andget('name')
andget('lines')
from thekwargs
.get
just returnsNone
if you don't supply a default, so you'll getself.name = None
here. If you want to specify a default name, you can dolike I did for
lines
.在第 32 行中,您使用 self.lines.append(line) 。
但是lines是用
Component2
初始化的类system
的成员,该类型是没有append方法的类
。component
in line 32 you use
self.lines.append(line)
.But lines is a member of the class
system
initialized withComponent2
, which type is the classcomponent
that does not have the methodappend
.问题在于,在定义
system
时,您将Component1
作为构造函数中的line
参数传递。由于 python 做了他能做的所有操作,并且不检查参数类型是否可以合法地完成操作,所以通过了。也许在系统构造函数中检查给定参数
lines
是否确实是列表类型是一个好主意,也许可以编写如下内容:这样,您就可以在之前知道问题 您尝试附加到非列表对象。
至于你问题的第二部分,你可以完全按照你的建议去做:(
例如,如果你想制作一个包含 3 个组件的系统,并使用一个空列表作为线路的“控制台”)
The problem is in the fact that when defining
system
you passComponent1
as aline
argument in constructor. Since python does all the operations he can and not checking for the argument types if the operation can be done legally, this passes.Maybe it would be a nice idea in the system constructor to check if the given argument
lines
is really of type list, and maybe writing something like:That way, you would know about the problem before you try appending to the non-list object.
And as for the second part of your question, you can do it exactly like you suggested:
(if you, for example, want to make a system with 3 components, and an empty list as an "console" for lines)