关于TypeError:gettext()缺少1个必需的位置参数:’self’:TypeError:gettext()缺少1个必需的位置参数:’self’ – python

TypeError: gettext() missing 1 required positional argument: 'self' - python

我对python还不熟悉,我正在努力为一个模块创建一个类,用于检查文本中的诅咒。有人能帮忙吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
eadme.txt"
)
Checktext.gettext()


urllib是一个软件包。您必须导入包中的模块request

1
import urllib.request

open(filename)返回一个文件对象。您要调用该对象的方法:

1
filetext = file.read()

正如G.Anderson所写,你想叫s.gettext(),而不是Checktext.gettext()。里面的self实际上等于外面的s。如果你想变得怪异,那么你也可以使用:

1
Checktext.gettext(s)

注意,作为缺少的参数传递的s。这里,python实际上揭示了面向对象的东西是如何在内部实现的。在大多数OO语言中,它是小心隐藏的,但是调用对象的方法在内部总是被翻译为传递一个指向类实例(即对象)的更特殊的参数。在定义一个python方法时,这个特殊的参数被显式命名为self(按照约定;您可以用不同的名称命名——您可以尝试作为讲座,但您应该始终保持这种约定)。

仔细考虑一下,您可以得到OO语言语法隐藏魔力的关键概念。类(对象)的实例实际上只是内存中存储数据部分的一部分,并传递给实现方法的函数。Checktext.gettext实际上是函数,s是对象。s.gettext()实际上只是表达完全相同的一种不同的方式。由于sChecktext类的实例,因此事实存储在s中。因此,s.gettext()产生了一种假象,即rigth代码将被神奇地调用。如果认为s是一种有形的东西,那么它比功能方法更适合受过训练的大脑。


您声明s为新的checktext对象,因此需要调用s.gettext()而不是未实例化的Checktext.gettext(),因为它没有self来引用