一个班级中的班级,这应该是固定的还是有意的?

时间:2016-06-17 20:18:33

标签: python class python-3.x inner-classes python-3.5

今天我正在尝试和/或搞乱Python 3.5。

我碰巧"意外地" 写下这个:

class Apple(object):
    class green(object):
        def eat():
            print("You just ate a green apple...")

    class red(object):
        def eat():
            print("You just ate a red apple...")

我现在可以这样做:

Apple.red.eat() # would print: "You just are a red apple..."
Apple.green.eat() # would print: "You just are a green apple..."

这让我想问一下,如何创建os.path.exists()等功能,或者使用其他"方法" 创建它们? 这应该是固定的,还是故意的?

提前谢谢。

1 个答案:

答案 0 :(得分:4)

类中的类在python中工作得很好 - 但是,python处理命名空间的主要机制是 modules packages ,而不是类。我没有在课堂上找到很多用法(虽然可能有一些有效的用例)。

要设置os.path.exists之类的内容,我会引导您转到source,除了os.path做一些非常粗略的事情来设置其命名空间(修改sys.modules)并避免使用包。除非您需要有条件地导入同名的不同内容,否则最好不要创建包...

在这种情况下,要设置包,您可以使用类似 1 的目录结构:

apples
  +--  __init__.py  (empty)
  |
  +--  base.py  (holds BaseApple class)
  |
  +--  green.py (holds GreenApple which inherits from BaseApple)
  |
  +--  red.py  (holds RedApple which inherits from BaseApple)

然后,假设您的PYTHONPATH可以正确找到所有内容,您可以这样做:

from apples.green import GreenApple
from apples.red import RedApple

1 显然,这只是许多方法之一,你可以设置它。如果没有一个真实的例子表明你很难提出任何具体的建议