代码之家  ›  专栏  ›  技术社区  ›  user10685

如何修改“pathlib.Path”的行为?

  •  2
  • user10685  · 技术社区  · 2 年前

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

    我做了一个子类 pathlib。路径 具有日志记录功能,并被替换 from pathlib import Path from mylib import MyPath as Path
    但它不会影响的现有子类 pathlib。路径 例如 pathlib.WindowsPath ,它是路径实例的实际实现类。

    from pathlib import Path
    from mynicelib import MyPath
    
    p = MyPath('/path/to/file')
    
    isinstance(p, MyPath)  # -> False
    isinstance(p, Path)  # -> True
    type(p)  # -> <class 'pathlib.WindowsPath'>
    
    2 回复  |  直到 2 年前
        1
  •  3
  •   Tim Roberts    2 年前

    只需进行一些猴痘检测:

    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')
    
        2
  •  2
  •   wim    2 年前

    对pathlib进行子类划分是有问题的。关于此主题的相关讨论如下:

    目前最好的解决方法是:

    class MyPath(type(pathlib.Path())):
        ...
    
    推荐文章