为什么我们在 Python 中使用类?

Why do we use classes in Python?

我正在学习 Python 中的类,我得到了一个非常基本的示例:

class Person:
    def say_hi(self):
        print('Hello, how are you?')

p = Person()
p.say_hi()

作者说我们可以很容易地写成:Person().say_hi()

那么,为什么我们不这样做而不是在 p 变量上实例化 Person class?


经过反思,我想知道为什么我们需要 classes。 我可以在根本不需要 class 的情况下执行 say_hi() 功能。我意识到这是一个非常简单的 class 但我想知道 classes 可以用于什么/什么时候使用 class?

这个问题确实太宽泛了,无法得到完整的答案,所以让我给你一个适合你的例子范围的问题,而不是你的问题的范围。

正如一些评论者所注意到的,您使用 classes 为您的函数提供 运行 中的 stateful 环境。假设我想创建例如,一个柜台。我可以使用全局变量和函数,例如:

counter = 0
def increment_counter():
    global counter
    counter += 1
def decrement_counter():
    global counter
    counter -= 1

但这会用两个额外的函数签名和一个变量污染我们的命名空间。另外,global 关键字是一种代码异味,应尽可能避免。更不用说您在整个代码库中只能有一个这样的计数器!如果您需要另一个,则必须重新输入所有代码并违反 DRY(不要重复自己)。

相反,我们创建一个 class:

class Counter(object):
    def __init__(self):
        self.count = 0
        # initialize count at zero
    def increment(self, by=1):
        self.count += by
    def decrement(self, by=1):
        self.count -= by

现在您可以根据需要多次实例化它,并且每个实例都会跟踪自己单独的计数,例如:

counter_a = Counter()
counter_b = Counter()

for _ in range(3):
    counter_a.increment()
for _ in range(1000000):
    counter_b.increment()

assert counter_a.count == 3
assert counter_b.count == 1000000