我用<gt<=>=,和!=在成员之间定义。我希望能够通过这些定义对元素列表进行排序,并获得相同的元素集,但顺序可能不同
在使用的示例中,path12是/dir1/file2等,而不是典型的字典顺序(最右边的数字变化最快,最左边的最慢(,我希望路径的最后一部分移动最慢,最左边最快。(我正在搜索文件,希望文件名匹配,当你进入目录树时,不要太强调。(
类定义中的相关代码,然后pytest代码是:
class BackPath:
def __init__(self, path_name: str):
self.full_name = path_name
self.path = Path(path_name)
self.parts = self.path.parts
self.back = list(self.parts[::-1])
self.name = self.back[0]
def __gt__(self, other):
return self.back > other.back
...
@pytest.fixture
def path11():
"""Return .../dir1/file1.test."""
# Note windows: "C:UsersStevePycharmProjectsImageProcessingdatadir1file1.txt"
return BackPath("C:/Users/Steve/PycharmProjects/ImageProcessing/data/dir1/file1.txt")
# Similarly for path12, path21, and path22.
@pytest.fixture
def list_of_paths():
"""list(path22, path12, path21, path11)."""
return [path22, path12, path21, path11]
def test_sort_works():
assert (list_of_paths.sort(key=lambda x: x.full_name) == [path11, path21, path12, path22])
我得到的属性错误是试图对字符串进行适当排序的错误。对于函数的引用,我认为它可能在查看path11((。我是pytest和@pytest.fixture的新手,所以我可能错误地指定了fixture的定义或使用。
一如既往,我们非常感谢您的帮助。
您已将path11
定义为函数,而不是变量。如果它的唯一目的是存储字符串,我建议将其更改为变量:
path11 = BackPath("C:/Users/Steve/PycharmProjects/ImageProcessing/data/dir1/file1.txt")
我注意到您使用的是pytest装饰器,它只能用于函数。。。因此,如果你真的想将你的路径定义为函数,你就必须改变在list_of_paths
:中访问它们的方式
return[path22(), path12(), path21(), path11()]