2017-09-23 64 views
-1

我只是想...但self.value显示错误ie ...我想循环self.a,self.b,self.c ...需要帮助需要学习帮助。 .....输出想要的是x = [AA,EE,II]使用类和loops.i尝试循环self.a,self.b,self.c使用循环.........我正在学习Python和面向对象编程新....帮我出python中的数组处理

import string 
A = ["AA","BB","CC","DD"] 
B = ["EE","FF","GG","HH"] 
C = ["II","JJ","KK","LL"] 
class User: 
    def __init__(self,A,B,C): 
     self.a= A 
     self.b= B 
     self.c= C 

    def User1(self): 
     x=[] 
     for i in range(ord('a'), ord('c')+1): 
      value= chr(i) 
      x.append= self.(value)[0] ///for getting first elemen from A,B,C 
      i+=1 
     return x 


honey= User(A,B,C) 
print(honey.User1()) 
+1

'x.append = self。(value)[0]'没有任何意义。要追加到列表中,您可以使用'x.append(value [0])'。你不能在这里使用'self.value',因为它不是一个实例属性(或者事先将它定义为'self.value = chr(i)')。 – roganjosh

回答

1

你想要的是使用getattr - 但也有一些其他的东西打破那里。 (这么开始的事实,注释符是#在Python,而不是//序列

,您的用户1的方法可能是这样的:

def User1(self): 
     x=[] 
     for value in "abc": 
      x.append(getattr(self, value)[0]) 
     return x 

注意以及该for语句总是迭代一个序列,并且不需要很长的路径就可以将序列转换为数字,只需将这些数字转换回所需的元素即可。由于字符串也是一系列字符 - 只需循环“abc”将产生你想要的字母

如上所述,t他内置的getattr将从self中检索所需的属性,将该属性名称作为字符串,包含在value变量中。

+1

@roganjosh:我只是保持它的硬编码,让它变得“简单”,只需对OP进行最少的修改即可理解正在发生的事情。 我同意迭代'self .__ dict__'可以更通用 - 但必须通过解释来做更多的事情而不是伤害。而且,如果你认为这样下去,或许最好一次谈论Sequence协议,并且OP会一次实现'__iter__'。 – jsbueno

+0

谢谢..... getattr工作很好,谢谢................... –