Python类可以继承自身吗?这是如何实现的?

7 投票
4 回答
2125 浏览
提问于 2025-04-15 18:06

我刚接触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 这个函数生成的(这段代码写得不太好,里面甚至用了 execeval 这些不太推荐的东西 :)),不过作者还想在这个基础上定义一些方法。

3

它是使用从其他模块导入的AuthProxy,并且是基于它进行扩展的。

18

这里的类声明并不是让这个类继承它自己,而是创建了一个类对象,当前的 AuthProxy 被当作父类,然后把这个类对象赋值给变量 'AuthProxy',这可能会覆盖之前从中继承的 AuthProxy。

其实,这和 x = f(x) 是差不多的:x 并不是 f 对它自己的值,没有循环依赖——只是旧的 x 和新的 x。旧的 AuthProxy 和新的 AuthProxy。

撰写回答