我正在学习Python中的类,我得到了一个非常基本的例子:
class Person:
def say_hi(self):
print('Hello, how are you?')
p = Person()
p.say_hi()
作者声明我们可以轻松地写出:Person().say_hi()
那么,为什么我们不这样做而不是在Person
变量上实例化p
类?
经过反思,我想知道为什么我们需要上课。
我可以完成say_hi()
功能,而不需要任何课程。我意识到这是一个非常简单的类,但我想知道什么类可以用于何时适合使用类?
答案 0 :(得分:4)
这个问题真的太宽泛了,无法得到完整的答案,所以让我给你一个符合你的例子范围的问题,而不是你问题的范围。
正如一些评论者所注意到的,你使用类来为你的函数提供一个有状态环境来运行。想象一下,我想创建一个计数器。我可以使用全局变量和函数,例如:
counter = 0
def increment_counter():
global counter
counter += 1
def decrement_counter():
global counter
counter -= 1
但是这会使用两个额外的函数签名和一个变量来污染我们的命名空间。此外,global
关键字是代码气味,应尽可能避免。更不用说你在整个代码库中只能有一个这样的计数器了!如果你需要另一个,你必须重新输入所有代码并违反DRY(不要重复自己)。
相反,我们创建了一个类:
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