自定义 pathlib.Path()
Custom pathlib.Path()
我试图用额外的功能自定义 pathlib.Path()。特别是,我真的很喜欢使用上下文管理器作为移入和移出目录的方法。我一直在使用它,但我似乎在让 Path() 与自定义上下文管理器一起工作时遇到错误。有谁知道为什么下面的代码会导致错误以及如何修复它,而无需在自定义 class?
中重新创建所有 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'
如果您从派生的具体 class 而不是 Path 中 subclass,它会起作用。
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
的方式有关(它选择成为 PosixPath
或 WindowsPath
的方式),因为该行为无法被 subclasses of Path
.
查看凯文的回答
也请看看讨论和解释here。
我现在无法阅读。您也可以尝试查看pathlib源代码。
我试图用额外的功能自定义 pathlib.Path()。特别是,我真的很喜欢使用上下文管理器作为移入和移出目录的方法。我一直在使用它,但我似乎在让 Path() 与自定义上下文管理器一起工作时遇到错误。有谁知道为什么下面的代码会导致错误以及如何修复它,而无需在自定义 class?
中重新创建所有 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'
如果您从派生的具体 class 而不是 Path 中 subclass,它会起作用。
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
的方式有关(它选择成为 PosixPath
或 WindowsPath
的方式),因为该行为无法被 subclasses of Path
.
查看凯文的回答
也请看看讨论和解释here。
我现在无法阅读。您也可以尝试查看pathlib源代码。