嵌套 classes - 如何使用来自父 class 的函数?

nested classes - how to use function from parent class?

如果我遇到这种情况:

class Foo(object):
    def __init__(self):
        self.bar = Bar()

    def do_something(self):
        print 'doing something'

    class Bar(object):
        def __init(self):
            self.a = 'a'

        def some_function(self):

我想在some_function函数中调用do_something函数,但是这个函数不属于class,我该如何调用这个函数? 我不想将它与 Foo().do_something 一起使用,还有其他选择吗? 我不想创建新实例

另一个例子:

class A(object):
    def __init__(self):
        self.content = 'abcdabcabcabc'
        self.b = self.B()
        self.c = self.C()    

    def some_function(self):
        print self.content

    class B(object):
        def foo(self):
            A.some_function()

    class C(object):
        def foo(self):
            A.some_function()

Python 中的嵌套 classes 没有实际用例,但用命名空间限定某些 class 属性的范围。在这种情况下,您根本不应该创建它们的实例。

如果你有嵌套的 classes 实例,你得到的一切都是令人头疼的 - 没有任何好处。 "Outter" class 不会将它们视为任何特殊的东西——这与 C++ 不同,从这个模式的起源来看,嵌套的 class 整体上是私有的到容器 class.

Python 中私有的概念纯粹是按照惯例完成的,如果除了 Foo 之外没有其他代码应该使用 Bar 的实例,则表明通过调用它 _Bar 并在文档中。

除了嵌套之外,Bar 无法通过其名称以外的任何其他方式获得对 Foo 的引用(好吧,有使用描述符协议的方法,但它不是为了这个) - 而且他们,如果你想 运行 Foo.do_something 没有 Foo 实例,do_something 无论如何应该是一个 class 方法。

现在,如果您想要聚合 个对象,那就是另一回事了。你要做的是:

class Bar(object):
    def __init(self, parent):
        self.parent = parent
        self.a = 'a'

    def some_function(self):
        self.parent.do_something(...)

class Foo(object):
    def __init__(self):
        self.bar = Bar(self)

    def do_something(self):
        print 'doing something'