首先,只是为了在名称上达成一致,类中的函数称为该类的方法。
在您的示例中,您的方法执行计算单词出现次数的操作,因此为了更清楚,您可以简单地调用您的方法count
。另请注意,在 Python 中,方法名称以小写开头是一种约定。
此外,使用所谓的新样式类是一种很好的做法,它们只是继承自object
.
最后,在 Python 中,一个方法需要至少有一个参数,按约定调用self
,并且应该是该类的一个实例。
因此,如果我们应用这些更改,我们会得到类似的结果:
class WordCounter(object):
def count(self):
print "Counting words..."
# Rest of your code
# ...
现在你的类有了一个方法,你首先需要创建你的类的一个实例,然后才能调用它的方法。因此,要在 Python 中创建类的实例Foo
,您只需调用Foo()
. 一旦你有了你的实例,你就可以调用你的方法。使用您的示例
# Create an instance of your class and save it in a variable
my_word_counter = WordCounter()
# Call your method on the instance you have just created
my_word_counter.count()
请注意,您不需要为 self 传递参数,因为Python 解释器将替换 self
为您的值word_counter
,即它调用WordCounter.count(my_word_counter)
.
关于 OO 的说明
其他人已经注意到,您的示例在 Python 中不是很好地使用类。OO 类旨在将行为(实例方法)与它们交互的数据(实例属性)放在一起。您的示例是一个简单的示例,没有与您的类相关联的真实内部数据。一个好的警告可能是您从不self
在方法中使用。
对于与某些特定数据无关的行为,Python 为您提供了编写模块级函数的灵活性 - 相反,Java 强制您将所有内容都放在类中。
正如其他人所建议的那样,为了使您的示例更加面向对象,您可以将文件名作为参数传递给__init__
并将其另存为self.filename
. 可能更好的是让您WordCounter
期望一个类似文件的对象,以便它不负责打开/关闭文件本身。就像是:
class WordCounter(object):
def __init__(self, txt_doc):
self.word_file = txt_doc
def count(self):
print "Counting words..."
for line in self.txt_doc:
# Rest of your code
# ...
with open(filename) as f:
word_counter = WordCounter(f)
word_counter.count()
最后,如果你想了解更多关于 Python 类的详细信息,一个很好的信息来源总是官方文档。