Class Python类方法给出了意外的;“绑定实例”;消息而不是结果
通过使代码更加面向对象来练习整理代码。我有以下目标,我正在努力学习两件事。首先,如何有效地构建一个类,以使诸如Class Python类方法给出了意外的;“绑定实例”;消息而不是结果,class,python-2.7,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_cust
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>>
膳食=大黄(1,2)
吃饭,吃奶油冻
在附加注释之后,当我将该方法插入括号时,会出现这些附加错误
fine.getcustard()
给了我TypeError:get\u custard()正好接受3个参数(1个给定)
和fine.getcustard(1,2)
给了我name错误:未定义全局名称“stubby”
谁能告诉我我错过了什么吗。谢谢这里是没有冗余属性/方法的工作代码(并且符合以下要求): 注意使用
self
访问属性;同样的语法用于访问方法(例如,self.get\u custard()
)。使用中:
注意使用括号
()
调用该方法。以下来自@jornsharpe应答工作代码的代码如下所示:
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
额外评论已及时更正谢谢@jornsharpe,不过我还是收到了更多错误。因此,fine.getcustard()给了我
TypeError:get_custard()正好接受了3个参数(1个给定)
和fine.getcustard(1,2)
给了我namererror:global name'stubby'没有定义
我知道这对大多数人来说似乎很基本,但对我来说似乎很违反直觉。谢谢@jornsharpe。在实际的代码中,我需要像stubby方法这样的东西,我不需要在类之外使用它,但需要另一个函数调用它。你能告诉我怎么做吗?@TahnoonPasha我已经在我的回答中对这一点发表了评论-你为什么不自己努力想一想呢?我会继续尝试,尽管经过一个小时的努力,我似乎无法让它工作。谢谢你的帮助@jornsharpe。这还远远不够。非常感谢你刚刚收到。再次感谢你。为了完整性,将添加到主要问题。@TahnoonPasha请不要在问题中包含答案。如果您有单独的答案,您可以添加自己的答案。该代码没有意义-stubby
忽略其参数a
和b
,只使用实例属性self.a
和self.b
(您可以很容易地测试这一点-看看当您从get_custard
传递不同的参数时会发生什么情况)。如果只使用实例属性,那么给方法参数是没有意义的。此外,您不需要指定临时变量;例如,只需返回self.a+self.b
。
>>> meal = Rhubarb(1, 2)
>>> meal.get_custard()
3
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