如果我做了这样的功能:
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()。在周期之前,自身是否应该已经初始化为变量?
答案 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()