在A类中从类B调用A类中的函数?

时间:2015-06-22 12:42:42

标签: python oop

class A(object):
    class B(object):
        def __getitem__(self, key):
            # Obviously not the same self here...
            x = self.function_A_needs_as_well(key)  

    def function_A_needs_as_well(self, value):
        pass

我希望这个例子不是太糟糕,至少有点自我解释。有人能告诉我如何从“B级”中调用“function_A_needs_as_well”吗?

3 个答案:

答案 0 :(得分:6)

Python不是Java。嵌套类没有对其包含类的特殊访问权限。因此,根本没有理由将它们嵌套。

如果B的实例需要访问A的实例,则需要在某处传递它。

答案 1 :(得分:1)

我不确定我是否完全理解你的问题,但你不能简单地让B类继承A类然后调用A类函数,在函数调用中传入一个值吗?

class A(object):

    def __init__(self, name="Object A"):
        self.name = name

    def classAfunction(self, value):
        print("This value has been passed to me: ", value)



class B(A):

    def __init__(self, name="Object B"):
        self.name = name
        super().__init__(name = "Object A")



ObjectB = B()

ObjectB.classAfunction("Banana")

input()

答案 2 :(得分:0)

没有隐式方法从内部类访问外部类,但是您可以在构造内部类时显式传递外部类的引用。看看下面的代码。我不知道您的设计问题需要查看以下stackoverflow post

class A(object):
    class B(object):
        def __init__(self, a_instance=None):
            self.a_instance = a_instance
        def __getitem__(self, key):
            # Obviously not the same self here...
            if self.a_instance is not None:
                x = self.a_instance.function_A_needs_as_well(key)

    def test_from_inside_A(self):
        b = A.B(self)
        b.__getitem__(2)

    def function_A_needs_as_well(self, value):
        pass

##test from outside A
a = A()
b = A.B(a)
b.__getitem__(2)