Cec*_*uez 0 python methods class
class Parser():
html_escape_table = {
"&": "&",
'"': """,
"'": "'",
">": ">",
"<": "<",
}
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)
类中的方法需要参数,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)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |