如何修改 `pathlib.Path` 的行为?

问题描述 投票:0回答:2

我希望

pathlib.Path
自动输出一些破坏性命令的日志,例如
path.rename(new_path)

我用日志功能创建了

pathlib.Path
的子类,并将
from pathlib import Path
替换为
from mylib import MyPath as Path

但不影响
pathlib.Path
现有的子类,例如
pathlib.WindowsPath
,它是路径实例的实际实现类。

from pathlib import Path
from mynicelib import MyPath

p = MyPath('/path/to/file')

isinstance(p, MyPath)  # -> False
isinstance(p, pathlib.Path)  # -> True
type(p)  # -> <class 'pathlib.WindowsPath'>
python wrapper monkeypatching pathlib
2个回答
1
投票

只需做一些猴子修补:

from pathlib import Path

Path.oldrename = Path.rename

def rename(self,b):
    print("Inside my rename")
    self.oldrename(b)

Path.rename = rename

p = Path('./x.c')
p.rename('y.c')

1
投票

子类化 pathlib 是有问题的。有关此主题的相关讨论位于:

目前最好的解决方法是:

class MyPath(type(pathlib.Path())):
    ...
© www.soinside.com 2019 - 2024. All rights reserved.