如何使def语句返回自我内部的对象(...)

时间:2016-10-28 01:12:13

标签: python class self

class Items():
    def Bucket(self):
        self.cost(5)

print(Items.Bucket()) # I want this to return the cost of the item

我想要打印列出项目的费用。在这种情况下,我希望它返回一个桶5.现在它返回...

TypeError: Bucket() missing 1 required positional argument: 'self'

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您收到此错误的原因是您的Bucket方法被定义为实例方法,并且您尝试将其称为方法。

我建议你在这里阅读this关于类方法和实例方法之间的区别。这也将解释 self 如何在这里发挥作用。

要制作Items的实例,您需要调用

items_obj = Items()

现在,您拥有Items课程的实例,现在可以正确调用您的方法Bucket

items_obj.Bucket()

您似乎已经在名为Bucket的{​​{1}}方法中调用了一种方法。因此,假设此方法只返回成本,那么只需返回cost方法中调用self.cost(5)

Bucket

所以,你应该作为最终的解决方案:

def Bucket(self):
    return self.cost(5)

注意:定义班级时不需要class Items: def Bucket(self): return self.cost(5) items_obj = Items() print(items_obj.Bucket()) 。假设您使用的是Python 3,则可以将您的类定义为:(),如上所示。

此外,通过在此处查看样式指南,最好在代码中遵循良好的样式练习:https://www.python.org/dev/peps/pep-0008/

答案 1 :(得分:0)

试试这个:

class Items():
    def __init__(self,cost):
        self.cost = cost
    def bucket(self):
        return self.cost

items = Items(5)
print(items.bucket())