第一次使用类 - 我做错了什么?

Cec*_*uez 0 python methods class

class Parser():
        html_escape_table = {
            "&": "&",
            '"': """,
            "'": "'",
            ">": ">",
            "<": "&lt;",
            }
        def html_escape(text):
            return "".join(html_escape_table.get(c,c) for c in text)
        def query():
            database = [x, y, z, etc, etc2]
            for x in database:
                html_escape(x)
                print x #for testing purposes
                return
test = Parser()

test.query()
Run Code Online (Sandbox Code Playgroud)

我这样做了吗?我一直收到错误:

TypeError: query() takes no arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

我没有看到我传递查询的任何地方,甚至是Parser.

有人可以解释我在这里做错了什么吗?

我尝试只调用Parser.query()并得到此错误(这是在我的所有函数和对象参数中添加self参数到我的Parser类之后)

    Parser.query()
TypeError: unbound method query() must be called with Parser instance as first argument (got nothing instead)
Run Code Online (Sandbox Code Playgroud)

Jak*_*yer 7

类中的方法需要参数,self这与在python执行实例方法的方法中将实例解析为方法有关.

例如

class Test(object):
    def say_hello(self):
        print "Hi there"
Run Code Online (Sandbox Code Playgroud)

如果你想解析你仍然需要的实例方法的参数,只是为了扩展它 self

class Test(object):
    def say_hello(self, name):
        print "Hi %s" % name
Run Code Online (Sandbox Code Playgroud)

编辑:

好的,进一步解释你必须知道python如何处理实例,python以非常详细和清晰的方式处理实例,self总是用来引用自身或当前实例,就像this在Java中一样.所以当python调用my_instance.method()它实际调用时,TheObject.method(my_instance)为什么self指向my_instance方法内部.这允许您在方法内使用实例,实例本身在arugments中传递.

编辑2:

即使你有自己作为方法的参数,你需要从一个像这样的实例调用它

my_parser = Parser()
my_parser.method()
Run Code Online (Sandbox Code Playgroud)

编辑3:

这不是Java,你不必将你的函数作为类中的方法绑定在一起,只需将它们作为自由漫游函数放在parser.py文件中,然后就可以了

import parser
parser.do_this()
Run Code Online (Sandbox Code Playgroud)