存在类似 Nonetype 路径的东西吗?

Exists something like a Nonetype path?

在我的 类 中,我喜欢用 None 启动我的路径变量。如果我使用 os.path 很容易与其他路径进行比较。但我更喜欢pathlib风格。

是否有解决方案:

import os

path1 = os.path.dirname('D\test\file.py')
path2 = None

if path1 == path2:
    print('OK')

使用路径库?

我的尝试是这样的:

from pathlib import Path

test1 = Path('D/test/file.py')
test2 = Path(None)

if test1.resolve() == test2.resolve():
    print('ok')

但这不起作用,因为 Path() 不接受 None 并且 None 没有方法 resolve()

你可以给自己一个哨兵,它的 resolve 方法 returns None 做你的检查。

示例:

from pathlib import Path

# You can use type to quickly create a throwaway class with a resolve method
NonePath = type('NonePath', (), {'resolve': lambda: None})

test1 = Path('D/test/file.py')
test2 = NonePath

if test1.resolve() == test2.resolve():
    print('ok')
elif test2.resolve() is None: # returning None allows you to do your check
    print('test2 is NonePath')

您可以更进一步,将 __dict__Path 中拉出来,并与 None 交换所有方法和属性,但这似乎有点过分了。

免责声明:这可能是个坏主意

from pathlib import Path
# this changes all methods to return None
# and sets all attributes to None
# if they aren't dunder methods or attributes
path_dict = {k: lambda: None if callable(v) else None 
             for k, v in Path.__dict__.items() 
             if not k.startswith('__')}

NonePath = type('NonePath', (), path_dict)