在调用类方法时被迫传递对象本身,这是我做错了吗?

2024-04-20 16:15:22 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我做了这样的函数:

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() missing 1 required positional argument: 'self'

我做错什么了吗?我不明白为什么我要把一个对象本身传递给它自己的方法。我认为它是自动传递的,因为我使用句点访问方法。至少这就是(我记得,也许不正确)它是C++的,所以我觉得这对Python来说是没有意义的。我做错什么了吗?你知道吗

基本上,为什么我需要传递它s.count(s),而不是只传递s.count()。self不应该在周期之前初始化变量吗?你知道吗


Tags: 方法函数selfnonereturninitdefcount
2条回答

您的代码有两个主要问题:

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()
s = Counter

这不会创建Counter类的实例。它将Counter类赋给变量s。这意味着您正试图在第二行中调用类本身的实例方法。你知道吗

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

s = Counter()

相关问题 更多 >