如何将内部类的代码移动到不同的文件(Python)?

时间:2015-02-15 16:12:29

标签: python class module

假设我有一个内部类的类:

class A:
   class B:
      ...
   ...

我希望在与B类的代码不同的文件中实现类A,以提高可读性。

如何实现这一目标?


编辑:我不希望以B以外的任何方式访问A.B

2 个答案:

答案 0 :(得分:3)

你可以这样做:

b_class.py:

class _B:
    ...

a_class.py:

import b_class

class A:
    B = b_class._B
    ...

Pythonic OOP的原则之一是“我们都在这里同意成年人”。这意味着您通常不想强制隐藏信息。前导下划线曾经意味着“不要使用它”,但它们不会阻止被访问的内容。

虽然通常你不需要像这样嵌套类。你想做什么?可能有更好的解决方案。

答案 1 :(得分:0)

您似乎正在使用C ++ namespace或Java package声明原则,而不是Python模型。 Python中名称空间的实现基于文件名。对象(类,函数等)由包含它们的源文件命名。

你想要HMM和HMM.State吗?很好,建议使用sweeneyrod并使用 has-a 对象组合原则:

import states

class HMM {
    def __init__(self):
        self.markov_stuff = stuff
        self.state = states.State(more_stuff)
        …
}

它的工作原理,其中states.py包含class State的定义。

如果你想让它看起来更多,那就是整合了#34;你可以使用from states import State屈服

from states import State

class HMM {
    def __init__(self):
        self.markov_stuff = stuff
        self.state = State(more_stuff)
        …
}

它为您提供了单独的文件:markov.py和states.py,其语法为.间接的一个较低级别。

如果你想要别的东西,要么你进入混乱(和非常规)模块字典,这是不推荐的。不同的语言允许以不同的方式表达意图,这是pythonic方式。