在调用类方法时被迫传递一个对象 - 我做错了吗?

时间:2014-02-21 08:40:37

标签: python class

如果我做了这样的功能:

class Counter:
    def __init__(self):
        self._count = 0

    def count(self) -> int:
        self._count += 1
        return self._count

    def reset(self) -> None:
        self._count = 0

并将它放在python shell中:

>>> s = Counter
>>> s.count()

我最终得到了这个:

  

TypeError:count()缺少1个必需的位置参数:'self'

我做错了吗?我不明白为什么我必须为自己的方法传递一个对象本身。我认为它是自动传递的,因为我使用句点访问该方法。至少这是(我记得,也许是错误的)它在C ++中是如此,所以对我来说这对python来说是没有意义的。我做错了吗?

基本上,为什么我需要传递s.count(s)而不是s.count()。在周期之前,自身是否应该已经初始化为变量?

2 个答案:

答案 0 :(得分:9)

s = Counter

这不会创建Counter类的实例。它将Counter类分配给变量s。这意味着您正在尝试在第二行中调用类本身的实例方法。

如果要创建Counter类的实例,则应编写:

s = Counter()

答案 1 :(得分:1)

您的代码存在两个主要问题:

1)在您班级的方法定义中,您使用了def count(self) -> int:def reset(self) -> None:的无效语法,您会注意到我已将其修改为删除->int / None

2)实例化Class Objects应使用函数表示法,因此s = Counter()代替s = Counter

以下代码中已修复了这两个问题:

class Counter:
    def __init__(self):
        self._count = 0

    def count(self):
        self._count += 1
        return self._count

    def reset(self):
        self._count = 0

s = Counter()
print s.count()