社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

这是不合理的python行为吗?

Danny Engelbarts • 3 年前 • 1386 次点击  

因此,我在查看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
 
1386 次点击  
文章 [ 1 ]  |  最新文章 3 年前