自定义pathlib.Path()

问题描述 投票:1回答:1

我试图用额外的功能定制pathlib.Path()。特别是,我非常喜欢使用上下文管理器作为进出目录的方法。我一直在使用这个方法,但是我似乎在让Path()与自定义的上下文管理器一起工作时出现了错误。有谁知道为什么下面的代码会导致错误,以及我如何在不重新创建自定义类中的所有Path()的情况下修复它?

# Python 3.7.3; Ubuntu 18.04.1
from pathlib import Path
import os
class mypath(Path):
    def __enter__(self):
        self.prdir = os.getcwd()
        os.chdir(str(self))
    def __exit__(self,**error_stuff):
        os.chdir(self.prdir)

p = mypath('~').expanduser()
...
AttributeError: type object 'mypath' has no attribute '_flavour'
path python-3.7 pathlib
1个回答
1
投票

如果你从一个派生的具体类而不是Path中的子类,它可以工作。

from pathlib import PosixPath
import os
class mypath(PosixPath):
    def __enter__(self):
        print('Entering...')
        self.prdir = os.getcwd()
        os.chdir(str(self))
    def __exit__(self, e_type, e_value, e_traceback):
        os.chdir(self.prdir)
        print('Exiting...')

p = mypath('~').home()
with p:
    # print(p.prdir)
    print(p)

不幸的是,我不知道为什么会这样。而且你可能想要更通用。经过一些研究,我发现这个问题比看起来要好得多。似乎这与一个简单的类的方式有关。Path 是创建的(它选择的方式要么是一个 PosixPathWindowsPath),因为该行为不能被子类的 Path.

请看Kevin的回答 此处

也请看一下讨论和解释。此处.

我现在看不全。你也可以试着看一下pathlib的源码。

© www.soinside.com 2019 - 2024. All rights reserved.