Python类可以继承自身吗?这是如何实现的?
我刚接触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
这到底在做什么呢?
另外,我在Eclipse中使用PyDev,它把这个标记成错误。我猜这不是问题。有没有办法让Eclipse知道这是正确的呢?
4 个回答
3
之前的 AuthProxy 是通过 __generate_proxies
这个函数生成的(这段代码写得不太好,里面甚至用了 exec
和 eval
这些不太推荐的东西 :)),不过作者还想在这个基础上定义一些方法。
3
它是使用从其他模块导入的AuthProxy,并且是基于它进行扩展的。
18
这里的类声明并不是让这个类继承它自己,而是创建了一个类对象,当前的 AuthProxy 被当作父类,然后把这个类对象赋值给变量 'AuthProxy',这可能会覆盖之前从中继承的 AuthProxy。
其实,这和 x = f(x)
是差不多的:x 并不是 f 对它自己的值,没有循环依赖——只是旧的 x 和新的 x。旧的 AuthProxy 和新的 AuthProxy。