在一个ruby类中定义它的一个常规名称。嵌套可以通过创建与文件同名的文件夹来完成。在
+--lib
+--broccoli.rb
+--broccoli/
+--broccoli_powers.rb
+--broccoli_powers/
+--green.rb
我对python比较陌生,所以我正试图找出如何在python中生成等价的结构(但我希望它是“pythonic”)。事物不能像ruby那样结构化的主要原因是不能有一个同名的模块和包:
解决此问题的一种方法是在文件夹的\uu init_uu.py中定义一个同名类:
+--lib
+--broccoli/
+--__init__.py # <- define "class Broccoli" here
+--broccoli_powers.py
现在,我可以像这样使用花椰菜类:
from broccoli import Broccoli
我可以在花椰菜课上这样:
from broccoli.broccoli_powers import BroccoliPowers
但是如果我想深入到花椰菜的名称空间,那么我需要移动花椰菜_电源.py放入花椰菜powers文件夹的\uu init_u.py中,如下所示:
+--lib
+--broccoli/
+--__init__.py # <- class Broccoli
+--broccoli_powers/
+--__init__.py # <- class BroccoliPowers
+--green.py
这并不像看上去那么糟糕,因为BroccoliPowers类仍然可以通过与之前完全相同的调用访问:“from”西兰花进口花椰菜”。在
我不喜欢把大量的代码塞进u init_uuy.py文件中,但我很自然地将代码组织到类中,嵌套类似乎也很自然。“Python”的方法是什么?在
当我想嵌套时,我考虑过的另一种方法是将类定义移动到某个文件中(例如“时钟.py“或”克拉斯.py”)并将其导入到UuInit_U.py文件命名空间中,如下所示:
+--lib
+--broccoli/
+--__init__.py # <- "from cls import Broccoli"
+--cls.py # <- define "class Broccoli" here
+--broccoli_powers.py
这样可以达到同样的效果(我可以像预期的那样访问Broccoli类:“from Broccoli import Broccoli”),而且我没有在uinit_uu.py文件中放入大量代码。在
Python的筑巢方式是什么?我错过了什么?在
首先,您应该考虑到类在Python中的需求要比在Ruby中少得多。所有代码都需要在一个类中;您应该为需要封装状态的时候保留这些代码。独立的函数可以在模块级完美地生存。在
另一件要记住的事情是Python的Zen的一个元素(如果您没有看到的话,请在shell中做
import this
):平面比嵌套好。也就是说,深度嵌套代码并不常见,您可能需要重新考虑您的结构。在现在,考虑到这两个因素,我想说您的最后一个选择是最具python风格的:在单独的模块中定义您的类,并将其导入
__init__.py
。在相关问题 更多 >
编程相关推荐