gpt4 book ai didi

python - 每个文件一个类导致 python 中的双名

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:30 26 4
gpt4 key购买 nike

所以我有一个自己的 Python 小项目,我想经常使用它。目前,它由两个类组成,我们称它们为类 AclassBclass

这两个类的代码量加起来很大。太大了,我不想将它们放在一个文件中,所以我为每个文件创建了一个文件。我将第一个放入文件 aclass.py,将第二个放入 bclass.py 所以我的结构现在看起来像这样:

my_project/
aclass.py
bclass.py
__init__.py

我想要的是能够从 python 调用我的项目并准备好类,如下所示:

import my_project
a_instance = my_project.Aclass()
b_instance = my_project.Bclass()

此刻,我要做的是

import my_project
a_instance = my_project.aclass.Aclass()

如果你问我,那是多余的。在问题中:

Avoid double typing class names in python

我看到了一个建议

from aclass import Aclass
from bclass import Bclass

进入 __init__.py 文件,但这会引起混淆,因为如果我这样做,我可以通过编写

创建我的类的实例
import my_project
a_instance = my_project.Aclass()

或者写

import my_project
a_instance = my_project.aclass.Aclass()

我觉得这个解决方案很难看,因为它不仅“加倍”了函数(同时创建了 aclass.Aclass()Aclass(),而且还意味着在 Python 看来,Aclass 类的任何实例现在都是

<class my_project.aclass.Aclass at ******************>

代替

<class my_project.Aclass at ******************>

这是自然的项目结构。

因此,我的问题是:

有没有解决我的问题的方法,其中 Aclass 将直接位于 my_project 包内,而无需将类写入 __init__ 文件?

最佳答案

;你只有两个选择:

  1. 将所有内容放在一个文件中,每个对象只有一条路径,代价是代码库笨拙;或
  2. 拥有多个文件并使用 __init__.py 定义库顶层可用的内容,接受这将意味着指向一个对象的多个路径。

对于超出少数类和函数的任何项目,后者显然更可取;它广泛用于标准库及其他地方。例如,使用 the json library , 其中 __init__.py包括 from .decoder import JSONDecoder:

>>> import json
>>> json.JSONDecoder
<class 'json.decoder.JSONDecoder'>
>>> json.JSONDecoder is json.decoder.JSONDecoder
True

在绝大多数情况下,您的代码的任何用户都会使用较短的名称而不是较长的名称,但是,因为它们指向同一个对象,所以它们是否真的并不重要混合搭配,您几乎没有机会看到“Python 认为”完全限定的类名是什么。

关于python - 每个文件一个类导致 python 中的双名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26867683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com