您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Python中重分类实例

在Python中重分类实例

当扩展(插件)想要更改表示本地存储库的对象时,在Mercurial(分布式修订控制系统)中对此类实例进行重分类。该对象被调用repo,并且最初是一个localrepo实例。它依次传递给每个扩展,并在需要时扩展将定义一个新类,该新类是该子类的子类,repo.__class__并将其类更改repo为该新子类!

代码中看起来像这样

def reposetup(ui, repo):
    # ...

    class bookmark_repo(repo.__class__): 
        def rollback(self):
            if os.path.exists(self.join('undo.bookmarks')):
                util.rename(self.join('undo.bookmarks'), self.join('bookmarks'))
            return super(bookmark_repo, self).rollback()

        # ...

    repo.__class__ = bookmark_repo

扩展名(我从书签扩展名中获取代码)定义了一个名为的模块级函数reposetup。在初始化扩展并传递ui用户界面)和repo(存储库)参数时,Mercurial将调用方法

然后,该函数定义repo碰巧是任何类的子类。这将 足够简单的子类localrepo,因为扩展需要能够延长对方。因此,如果第一个扩展名更改repo.__class__foo_repo,则下一个扩展名应更改repo.__class__为的子类,foo_repo而不仅仅是的子类localrepo。最后,该函数将更改instanceø的类,就像您在代码中所做的一样。

我希望这段代码可以显示对该语言功能的合法使用。我认为这是我在野外看到它的唯一地方。

python 2022/1/1 18:32:32 有354人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶