Py学习  »  Python

这是不合理的python行为吗?

Danny Engelbarts • 3 年前 • 1389 次点击  

因此,我在查看pathlib源代码时,注意到一些os-lib函数被嵌入到pathlib类中。我必须承认,我花了一点时间才明白这是怎么回事。

import os

class Foo:
    listdir = os.listdir
    join = os.path.join
    walk = os.walk

    def __init__(self, name):
        self.name = name

    def __fspath__(self):
        return self.name

curr = Foo('.')
pipo = Foo('pipo')

该类定义将os库的listdir、join和walk函数添加为Foo类上的方法。Foo类被识别为类路径对象,因为它还具有 __fspath__ 方法

什么时候 curr.join('bar') 它将加入curr的名字,用“酒吧”。下面的代码显示了这种确切的行为,并给出了我所期望的结果。

$ tree
.
├── pipo
│   └── clown
└── test.py

1 directory, 2 files
$

>>> curr.join("baz") 
./baz
>>>
>>> pipo.join("baz")
pipo/baz
>>>
>>> [x for x in curr.walk()]
[('.', ['pipo'], ['test.py']), ('./pipo', [], ['clown'])]
>>>
>>> [x for x in pipo.walk()]
[('pipo', [], ['clown'])]
>>>

然后我尝试了listdir函数。。。而且 失败 .listdir函数显示了不同的行为,我很困惑为什么?

>>>
>>> os.listdir()
['pipo', 'test.py']
>>>
>>> curr.listdir()
['pipo', 'test.py']
>>>
>>> os.listdir("pipo")
['clown']
>>>
>>> pipo.listdir()
['pipo', 'test.py']
>>> 

pipo上的listdir方法显示的输出与curr上的listdir相同?

在我看来 join walk 接受自我介绍,但不知何故 listdir 没有。为什么会这样?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130859
 
1389 次点击  
文章 [ 1 ]  |  最新文章 3 年前