Python 将函数作为_init中的else__
如何在Python 将函数作为_init中的else__,python,tornado,Python,Tornado,如何在\uuuu init\uuuu中获取if/else中的函数: class Foo(object): def __init__(self, q, **keywords): if a == "": print "No empty strings" else: def on_g(self, response): if response.error:
\uuuu init\uuuu
中获取if/else
中的函数:
class Foo(object):
def __init__(self, q, **keywords):
if a == "":
print "No empty strings"
else:
def on_g(self, response):
if response.error:
print "Check your internet settings"
else:
self.Bar()
http_client.fetch("http://www.google.com/", self.on_g)
因为如果我输入一个空字符串,程序就不会读取\u g()上的
如果我将on_g()
外部与\uuu init\uuuu()
并行使用,我需要一个声明的变量,例如:
class Foo(object):
def __init__(self, q, **keywords):
if a == "":
print "No empty strings"
else:
self.on_g()
def on_g(self):
print 'hello there'
将返回您的bug所在的位置
http_client.fetch("http://www.google.com/", self.on_g)
应该是哪一个
http_client.fetch("http://www.google.com/", on_g)
因为您定义的是函数,而不是方法。您的错误在
http_client.fetch("http://www.google.com/", self.on_g)
应该是哪一个
http_client.fetch("http://www.google.com/", on_g)
因为您定义的是一个函数,而不是一个方法。self
(您通过\uuuu init\uuuu
创建的实例)没有on\u g
方法
类
-es的函数需要在类
级别定义(如第二段代码所示)。当类
第一次出现时,将对其进行评估。。。嗯。。。“向上看”?“评估”
这就是为什么你的第二段代码是有效的。当on\g
方法的实际定义似乎在代码的后面出现时,您为什么可以在中调用self.on\g
?这对口译员来说是一种奇怪的行为(乍一看),对吗?好。。。这是因为当您运行self.on_g()
时,整个Foo
类已经被评估,并且on_g
已经被添加到类中(而不是添加到实例中
!:添加到类中
)
抛出:
Traceback (most recent call last):
File "./test.py", line 10, in <module>
a = Test()
File "./test.py", line 8, in __init__
self.test()
AttributeError: 'Test' object has no attribute 'test'
相同的属性错误
如果您仍然希望在运行时将添加到类
(非常糟糕的主意,IMHO),您可以通过执行以下操作来完成解释器的工作:
class Test(object):
def __init__(self):
def test(self):
print "Hello"
self.__class__.test = test
self.test()
a = Test()
a.test()
。。。正确打印:
Hello
Hello
现在,我能想到的两件最简单的事情是:
将(self)
上的def移动到类
级别(如第二个代码段所示)
调用您的http\u客户端。在上使用作为\uuuu init\uuuu
作用域的本地函数获取(挑剔语言:on\ug
现在是一个函数,而不是一个方法,因为它不再绑定到对象)
self
(您通过\uuuu init\uuuu
创建的实例)没有on\g
方法
类
-es的函数需要在类
级别定义(如第二段代码所示)。当类
第一次出现时,将对其进行评估。。。嗯。。。“向上看”?“评估”
这就是为什么你的第二段代码是有效的。当on\g
方法的实际定义似乎在代码的后面出现时,您为什么可以在中调用self.on\g
?这对口译员来说是一种奇怪的行为(乍一看),对吗?好。。。这是因为当您运行self.on_g()
时,整个Foo
类已经被评估,并且on_g
已经被添加到类中(而不是添加到实例中
!:添加到类中
)
抛出:
Traceback (most recent call last):
File "./test.py", line 10, in <module>
a = Test()
File "./test.py", line 8, in __init__
self.test()
AttributeError: 'Test' object has no attribute 'test'
相同的属性错误
如果您仍然希望在运行时将添加到类
(非常糟糕的主意,IMHO),您可以通过执行以下操作来完成解释器的工作:
class Test(object):
def __init__(self):
def test(self):
print "Hello"
self.__class__.test = test
self.test()
a = Test()
a.test()
。。。正确打印:
Hello
Hello
现在,我能想到的两件最简单的事情是:
将(self)
上的def移动到类
级别(如第二个代码段所示)
调用您的http\u客户端。在上使用作为\uuuu init\uuuu
作用域的本地函数获取(挑剔语言:on\ug
现在是一个函数,而不是一个方法,因为它不再绑定到对象)
什么是a
?id似乎没有在任何地方声明。a
已声明,但问题是当我使用回调
系统时,它不想进入else。什么是a
?id似乎没有在任何地方声明。a
已声明,但问题是当我使用回调
系统时,它不想进入else。您应该提到,他们还需要从上的arg中删除self
,我将如何使用第二个代码(在问题中)要避免未声明响应
?因为单独使用,它将很好地工作,并获取您应该提到的google
,他们还需要从_g
argspec上的中删除self
,我如何使用第二个代码(在问题中)来避免响应
未声明?因为单靠它,它就可以很好地工作,并获取google
啊,我想现在OOP对我来说不再是一种魔法了!非常感谢。没问题。。。谢谢你考虑这个被接受的答案,但是要准备好:一旦你开始处理OOP,你肯定会发现很多新的东西。有趣的东西!!:-D(是的,非常有趣)享受!!啊,我想现在OOP对我来说不再是魔术了!非常感谢。没问题。。。谢谢你考虑这个被接受的答案,但是要准备好:一旦你开始处理OOP,你肯定会发现很多新的东西。有趣的东西!!:-D(是的,非常有趣)享受!!