TypeError:gettext()缺少1个必需的位置参数:'self'-python

时间:2018-12-20 16:20:55

标签: python python-3.x class self

我是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()

2 个答案:

答案 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()实际上只是表达完全相同的另一种方式。由于sChecktext类的实例,因此事实存储在s内部。因此,s.gettext()产生了一种幻觉,即严格的代码将被神奇地称为。如果s被认为是有形的东西,那么它比功能方法更适合受过训练的大脑。