在Python中重分类实例

在Python中重分类实例,第1张

在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ø的类,就像您在代码中所做的一样。

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5653336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存