Python类方法给出意外的"绑定实例"消息而不是结果

时间:2014-10-14 11:18:54

标签: class python-2.7

通过使代码更加面向对象来练习整理一些代码。我有以下对象,我正在尝试学习两件事。首先,如何有效地构建一个类,以便get_custard等辅助函数可以工作,第二个如何使用类stubby之类的方法,这些方法是类的内部但不暴露给实例的用户。

class rhubarb():
    def __init__(self, a, b):
        self.a = a
        self.b = b
        self.custard = None

    def get_custard(self,a,b):
        custard = stubby(a,b)
        return custard

    def stubby(a,b):
        stub = a + b
        return stub

而不是总和,我得到以下结果

meal = rhubarb(1,2)
meal.get_custard

<bound method rhubarb.get_custard of <__main__.rhubarb instance at 0x7f6b2eb49518>>

继续附加注释后,当我将方法括起来时,我得到了这些额外的错误

meal.getcustard()给了我TypeError: get_custard() takes exactly 3 arguments (1 given)meal.getcustard(1,2)给了我NameError: global name 'stubby' is not defined

有人可以告诉我在这里错过了什么。感谢

2 个答案:

答案 0 :(得分:1)

以下是没有冗余属性/方法的工作代码(并且符合the style guide):

class Rhubarb():

    def __init__(self, a, b):
        self.a = a
        self.b = b

    def get_custard(self):
        return self.a + self.b

注意使用self来访问属性;相同的语法用于访问方法(例如self.get_custard())。使用中:

>>> meal = Rhubarb(1, 2)
>>> meal.get_custard()
3

请注意使用括号() 调用方法。

答案 1 :(得分:0)

从@jonrsharpe开始,答案工作代码如下所示:

class rhubarb():
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def get_custard(self):
        a = self.a
        b = self.b
        return self.stubby(a,b)

    def stubby(self, a,b):
        return a + b

已正确更正其他评论