新手求教,关于PYTHON中类和对象的问题

rjh96 2018-03-24 10:30:38
class part(object):
allElements = []
class element(object):
type = 0
data = []

prt = part()
for i in range(0,2):
currentElm = part.element()
currentElm.type = i
currentElm.data.append(i)
prt.allElements.append(currentElm)
for elm in prt.allElements:
print(elm.type, elm.data)

我用python编译器输出的结果是
0 [0, 1]
1 [0, 1]
但是我个人期望的结果是
0 [0]
1 [1]
为什么type可以重新初始化而data不行,并且输出了两个[0, 1]?请问如何做到我期望的结果?(个人不是很懂__init__这些)


...全文
210 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
布衣弓长 2018-03-25
  • 打赏
  • 举报
回复
这样更容易读懂:class element(object): def __init__(self): self.type = -1 self.data = [] prt = element() for i in range(2): E1 =prt.type E2 =prt.data print(E1,E2) E1 =i E2.append(i) print(E1, E2) E2.pop(0) ##显示结果为:-1 [] 0 [0] -1[] 1[1]
布衣弓长 2018-03-25
  • 打赏
  • 举报
回复
运行的结果满足要求,0[0] 1[1] 请参考我博客中关于类,类变量,对象,实例变量,类作用域,继承等关系
布衣弓长 2018-03-25
  • 打赏
  • 举报
回复
class part(object): allElements = [] class element(object): type = 0 data = [] prt = part() for i in range(0,2): if i==0: currentElm = part.element() currentElm.type = i currentElm.data.append(i) prt.allElements.append(currentElm) for elm in prt.allElements : print(elm.type, elm.data) currentElm.data.pop(i) if i==1: currentElm = part.element() currentElm.type = i currentElm.data.append(i) prt.allElements.append(currentElm) for elm in prt.allElements : elm.type, elm.data print(elm.type, elm.data)
陈年椰子 2018-03-24
  • 打赏
  • 举报
回复
class part(object):
    allElements = []

    class element(object):
        def __init__(self):
            self.type = -1
            self.data = []


prt = part()
for i in range(0, 2):
    currentElm = part.element()
    print(currentElm.type, currentElm.data)
    currentElm.type = i
    currentElm.data.append(i)
    prt.allElements.append(currentElm)
    print(currentElm.type, currentElm.data)
是这个意思吗?
陈年椰子 2018-03-24
  • 打赏
  • 举报
回复
你的写法, type , data 的定义和使用都不明确。 要想程序按你的思路运行,就要规范程序的语句,逻辑要清晰。 建议先看看python 类部分的文档。
rjh96 2018-03-24
  • 打赏
  • 举报
回复
我修改了一下代码,描述更清晰点: class part(object):     allElements = []     class element(object):         type = -1         data = []          prt = part() for i in range(0,2):     currentElm = part.element()     print(currentElm.type, currentElm.data)     currentElm.type = i      currentElm.data.append(i)     prt.allElements.append(currentElm)     print(currentElm.type, currentElm.data) for elm in prt.allElements:     print(elm.type, elm.data) 编译器输出是 -1 [] 0 [0] -1 [0] 1 [0, 1] 0 [0, 1] 1 [0, 1] 但我想要的结果是 -1 [] 0 [0] -1 [] 1 [1] 0 [0] 1 [1]
rjh96 2018-03-24
  • 打赏
  • 举报
回复
我修改了一下代码,描述更清晰点: class part(object): allElements = [] class element(object): type = -1 data = [] prt = part() for i in range(0,2): currentElm = part.element() print(currentElm.type, currentElm.data) currentElm.type = i currentElm.data.append(i) prt.allElements.append(currentElm) print(currentElm.type, currentElm.data) 编译器输出是 -1 [] 0 [0] -1 [0] 1 [0, 1] 0 [0, 1] 1 [0, 1] 但我想要的结果是 -1 [] 0 [0] -1 [] 1 [1] 0 [0] 1 [1] for elm in prt.allElements: print(elm.type, elm.data)
rjh96 2018-03-24
  • 打赏
  • 举报
回复
引用 3 楼 seakingx 的回复:
class part(object):
    allElements = []

    class element(object):
        def __init__(self):
            self.type = -1
            self.data = []


prt = part()
for i in range(0, 2):
    currentElm = part.element()
    print(currentElm.type, currentElm.data)
    currentElm.type = i
    currentElm.data.append(i)
    prt.allElements.append(currentElm)
    print(currentElm.type, currentElm.data)
是这个意思吗?
对的,但是为什么这样就可以呢?

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧