为了账号安全,请及时绑定邮箱和手机立即绑定

如何将文件结构表示为 python 对象

如何将文件结构表示为 python 对象

江户川乱折腾 2021-10-12 17:53:31
我试图找到一种将文件结构表示为 python 对象的方法,这样我就可以轻松获得特定路径,而无需输入字符串。这适用于我的情况,因为我有一个静态文件结构(不改变)。我想我可以将目录表示为类,并将目录中的文件表示为类/静态变量。我希望能够浏览 python 对象,以便它返回我想要的路径,即:print(FileStructure.details.file1) # root\details\file1.txtprint(FileStructure.details) # root\details我从下面的代码中得到的是:print("{0}".format(FileStructure())) # rootprint("{0}".format(FileStructure)) # <class '__main__.FileStructure'>print("{0}".format(FileStructure.details)) # <class '__main__.FileStructure.details'>print("{0}".format(FileStructure.details.file1)) # details\file1.txt我到目前为止的代码是......import os class FileStructure(object): # Root directory    root = "root"    class details(object): # details directory        root = "details"        file1 = os.path.join(root, "file1.txt") # File in details directory        file2 = os.path.join(root, "file2.txt") # File in details directory        def __str__(self):            return f"{self.root}"    def __str__(self):        return f"{self.root}"我不想必须实例化类才能完成这项工作。我的问题是:如何调用类对象并让它返回一个字符串而不是 < class ....> 文本我怎样才能让嵌套类使用它们的父类?
查看完整描述

2 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

预先:这是一个糟糕的解决方案,但它只需少量更改即可满足您的要求。基本上,您需要实例__str__才能工作,因此这会欺骗使用装饰器语法将您的类声明更改为已声明类的单例实例化。由于从嵌套类中隐式引用外部类是不可能的,因此该引用是显式执行的。并且可以复用__str__,file1并且file2被做成@propertys这样他们就可以使用实例的str形式details来构建自己。


@object.__new__

class FileStructure(object): # Root directory

    root = "root"


    @object.__new__

    class details(object): # details directory

        root = "details"

        @property

        def file1(self):

            return os.path.join(str(self), 'file1')

        @property

        def file2(self):

            return os.path.join(str(self), 'file2')


        def __str__(self):

            return f"{os.path.join(FileStructure.root, self.root)}"


    def __str__(self):

        return f"{self.root}"

再说一遍:虽然这确实会产生您想要的行为,但这仍然是一个糟糕的解决方案。我强烈怀疑您在这里遇到了 XY 问题,但这回答了所问的问题。


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号