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中的第一类对象,这意味着可以将它们赋值给变量并将它们传递给周围的人。