相对较新的Python,我在PyFacebook库中看到了以下构造(来源:http://github.com/sciyoshi/pyfacebook/blob/master/facebook/init.py#L660)。我很好奇这是做什么的,因为它似乎是一个继承自己的类。
class AuthProxy(AuthProxy):
"""Special proxy for facebook.auth."""
def getSession(self):
"""Facebook API call. See http://developers.facebook.com/documentation.php?v=1.0&method=auth.getSession"""
...
return result
def createToken(self):
"""Facebook API call. See http://developers.facebook.com/documentation.php?v=1.0&method=auth.createToken"""
...
return token
这是做什么的?
Tangentially相关,我在Eclipse中使用PyDev,它将此标记为错误。我猜不是这样的。无论如何让Eclipse知道这很好吗?
答案 0 :(得分:14)
那里的类语句没有让类继承自己,它创建一个类对象,当前值为AuthProxy作为超类,然后将类对象分配给变量'AuthProxy',可能会覆盖先前分配的它继承自的AuthProxy。
基本上,它与x = f(x)
大致相同:x不是f本身的值,没有循环依赖 - 只有旧的x和新的x。旧的AuthProxy和新的AuthProxy。
答案 1 :(得分:3)
它使用从其他模块导入的AuthProxy(检查导入)并从中派生。
答案 2 :(得分:3)
“前”AuthProxy是由__generate_proxies
创建的(它不是很好的代码,其中甚至有exec
和eval
:)),但作者也希望定义一些方法就在它之上。
答案 3 :(得分:1)
要让Eclipse停止抱怨它,请执行以下操作:
类AuthProxy(AuthProxy):#@ UndefinedVariable