Python 在调用类方法时被迫传递对象本身——我做错了吗?
如果我做了这样的函数:Python 在调用类方法时被迫传递对象本身——我做错了吗?,python,class,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中: >>>
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.count()。self不应该在周期之前初始化为变量吗
s = Counter
这不会创建计数器
类的实例。它将计数器
类分配给变量s
。这意味着您正试图在第二行中调用类本身的实例方法
如果要创建计数器
类的实例,应编写:
s = Counter()
您的代码存在两个主要问题: 1) 在类中的方法定义中,您对
def count(self)->int:
和def reset(self)->None:
使用了无效语法,您会注意到我修改了这些语法以删除->
和int
/None
2) 实例化应该使用函数表示法,因此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()
使用
()
创建一个实例:s=Counter()
@AshwiniChaudhary,为什么要留下一个答案作为注释?这很有意义,谢谢。我的错误与S= int很相似,尽管它不是C++中的语法错误,因为类是Python中的第一类对象,这意味着可以将它们赋值给变量并将它们传递给周围的人。