2014-11-21 54 views
-1

我有一个方法类。现在,我把这个类放在一个列表中。 当我试图打印的方法,我做的:列表中的对象

print(listname[pointer].method) 

但是,当我编译它说,对象不支持指数化。

确切的代码是这样的:

class hero(): 
    def __init__(self, heroname): 
     self.h=heroname 

herolist=[] 
herolist.append(hero) 

print(herolist[0].h) 

我期待的是,代码将打印主人公的名字,但事实并非如此。我究竟做错了什么?

编辑:

对不起,我忘了,以显示它的代码,但课堂上,我做了实例我试图调用对象之外。确切的说,我不喜欢的东西:

heroone=hero() 
heroone.h='jude' 
+1

你的代码中有几个问题,但它不给你说的错误(“不支持索引”)。 – BrenBarn 2014-11-21 07:26:28

回答

2

你有几个问题。首先,初始化方法的名称是__init__两个下划线在每边),而不是___init___。其次,通过附加hero您正在追加课程本身。该类本身没有h属性。只有它的实例才具有h属性,因为__init__仅在创建实例时调用。第三,您在__init__方法中忘记了self参数。第四,你显然写了__init__期待一个“heroname”的论点,但你没有通过任何这样的论点。 (你不传递任何参数,因为你从来没有实例化的类。)

试试这个:

class hero(): 
    def __init__(self, heroname): 
     self.h = heroname 

herolist=[] 
herolist.append(hero('Bob the Hero')) 

print(herolist[0].h) 
0

您正在使用三个_init的方法,因为它的构造不叫。 两个init需要两个_。 要将名称分配给h,请将其传递给init方法。 使用CamelCase来namethe类

下面是工作代码:

class Hero(): 
    def __init__(self, heroname): 
     self.h = heroname 

herolist=[] 

herolist.append(Hero('Dude')) 

print(herolist[0].h) 
0

您存储类定义,而不是一个实例化的客体,这意味着heroname没有一个值。你可以写:

herolist.append(hero('Achile')) 

和你的例子将按预期工作。

0

这样做: -

class Hero(): 
    def __init__(self, heroname): 
     self.h=heroname 

herolist=[] 

现在你可以这样做:

h1 = Hero('jude') 
herolist.append(h1) 
print herolist[0].h 

或更简单:

herolist.append(Hero('Hero')) 
print herolist[0].h