列表中的对象

时间:2014-11-21 07:23:36

标签: python class

我有一个方法课。现在,我将该类放在列表中。 当我尝试打印方法时,我会这样做:

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'

4 个答案:

答案 0 :(得分:2)

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

试试这个:

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

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

print(herolist[0].h)

答案 1 :(得分:0)

您正在使用三个_init方法,因为没有调用构造函数。 双方_需要两个init。 要为h指定名称,请将其传递给init方法。 使用CamelCase命名类

以下是工作代码:

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

herolist=[]

herolist.append(Hero('Dude'))

print(herolist[0].h)

答案 2 :(得分:0)

存储类定义,而不是实例化对象,这意味着heroname没有值。你可以写:

herolist.append(hero('Achile'))

并且您的示例将按预期工作。

答案 3 :(得分: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