假设我有一个内部类的类:
class A:
class B:
...
...
我希望在与B
类的代码不同的文件中实现类A
,以提高可读性。
如何实现这一目标?
编辑:我不希望以B
以外的任何方式访问A.B
。
答案 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方式。