我是python的新手,我正打算为检查文本中的curses的模块创建一个类。 有人可以帮忙吗?
import urllib
class Checktext:
def __init__(self, text):
self.text = text
def gettext(self):
file = open(self.text, "r")
filetext = open.read()
for word in filetext.split():
openurl = urllib.request.urlopen("http://www.wdylike.appspot.com/?q=" + word)
output = openurl.read()
truer = "true" in str(output)
print(truer)
s = Checktext(r"C:\Users\Tzach\.atom\Test\Training\readme.txt")
Checktext.gettext()
答案 0 :(得分:2)
您已将s
声明为新的Checktext对象,因此您需要调用s.gettext()
而不是未实例化的Checktext.gettext()
,因为它没有self
可以引用< / p>
答案 1 :(得分:2)
urllib
是一个程序包。您必须导入包中的 module request
:
import urllib.request
open(filename)
返回文件对象。您要调用该对象的方法:
filetext = file.read()
就像G. Anderson所写的那样,您要呼叫s.gettext()
而不是Checktext.gettext()
。内部的self
实际上等于外部的s
。如果您想古怪,那么您实际上也可以使用:
Checktext.gettext(s)
注意将s
作为 missing 参数传递。在这里,Python实际上揭示了如何在内部实现面向对象的东西。在大多数OO语言中,它是精心隐藏的,但是调用对象的方法总是在内部转换为传递一个指向类的 instance 的另外一个特殊参数,即对象。在定义Python方法时,该特殊参数显式命名为self
(按照惯例;您可以使用不同的名称-您可以尝试作为讲课,但您应该始终保持该惯例)
仔细考虑一下,您可以获得OO语言语法的隐藏魔术的关键思想。类的实例(对象)实际上只是存储数据部分的内存的一部分,并传递给实现方法的函数。 Checktext.gettext
实际上是函数,s
是对象。 s.gettext()
实际上只是表达完全相同的另一种方式。由于s
是Checktext
类的实例,因此事实存储在s
内部。因此,s.gettext()
产生了一种幻觉,即严格的代码将被神奇地称为。如果s
被认为是有形的东西,那么它比功能方法更适合受过训练的大脑。