错误:必须使用“类名”实例作为第一个参数调用未绑定方法“方法名称”(获取classobj实例)

时间:2013-11-22 23:45:06

标签: python class python-2.7 methods matplotlib

我希望你们能在这里帮助我。 我从以下代码中得到了这个错误:

Traceback (most recent call last):
  File "C:\Python27\Lib\idlelib\Tarea5.py", line 60, in <module>
    bg.addBandit(b)
TypeError: unbound method addBandit() must be called with BanditGroup instance as first argument (got classobj instance instead)

代码:

from numpy import *
from matplotlib import pyplot as p
class Bandit:
    power = random.uniform(15,46)
    life = random.uniform(40,81)
    def __init__(self, power, life):
        self.power = power
        self.life = life
class BanditGroup:
    def __init__(self,a):
        self.group = [a] #Where 'a' is an object of the class Bandit
    def addBandit(self,b):
        self.group.append(b) #Where 'b' is an object of the class Bandit
        return self.group

howmanygroups = random.randint(4,11)
i = 0
j = 0
while i <= howmanygroups:
    bg = BanditGroup
    howmanybandits = random.randint(1,11)
    while j <= howmanybandits:
        b = Bandit
        bg.addBandit(b) #<-- line 60
        j+=1
    bgposx = random.uniform(0,50000)
    bgposy = random.uniform(0,50000)
    p.plot(bgposx,bgposy,'r^')
    i+=1

如果有人能告诉我这里发生了什么,我真的很感激。大约2个月前我开始学习python 2.7。 谢谢!

3 个答案:

答案 0 :(得分:2)

问题是addBandit需要使用BanditGroup的实例。在类名后添加(...)将创建一个:

bg = BanditGroup(...)

现在,您bg指向了类本身,而不是它的实例。

这里需要使用Bandit完成同样的事情:

b = Bandit(...)

注意:...表示传入适当的参数。您使用必需的BanditGroup.__init__参数aBandit.__init__所需的powerlife参数。由于我不知道你想要的是什么,所以我把它们排除了。

答案 1 :(得分:2)

尝试将代码更改为(注意类实例化的括号):

while i <= howmanygroups:
    bg = BanditGroup(a)
    howmanybandits = random.randint(1,11)
    while j <= howmanybandits:
        b = Bandit(power, life)
        bg.addBandit(b) #<-- line 60

答案 2 :(得分:1)

在创建Bandit和BanditGroup类的实例时,可能需要parens。否则,您要为变量分配一个类,而不是类的实例。

EG:bg = BanditGroup()