通过使代码更加面向对象来练习整理一些代码。我有以下对象,我正在尝试学习两件事。首先,如何有效地构建一个类,以便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
有人可以告诉我在这里错过了什么。感谢
答案 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
已正确更正其他评论