我有一个方法课。现在,我将该类放在列表中。 当我尝试打印方法时,我会这样做:
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'
答案 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