Python - 访问父成员

时间:2011-12-13 21:40:03

标签: python class import namespaces member

我正试图弄清楚如何让成员类在他们是外部模块的一部分时从他们的父母那里访问数据时,我在这里面临着停滞。

基本上,这是有效的(B类可以访问父类的方法,如:A.say_hi(A)):

class A:
    def __init__(self):
        print("Initializing parent object...")
        self.child = self.B()

    class B:
        def __init__(self):
            print("Initializing child...")
            A.say_hi(A)

    def say_hi(self):
        print("A class says hi")

但是,如果类开始变得越来越大,这会变得非常混乱,所以我将其他类放在文件中并将它们内联导入。问题是,如果我在定义B类时尝试使用'import B.py',我就不能再让成员类访问其父成员和函数。

有没有办法获得原始行为而不将成员类留在与父文件相同的文件中?

2 个答案:

答案 0 :(得分:3)

实际上,在您的示例中,您无法访问类B中的A实例。而代码A.say_hi(A)确实有效,但是错误。在对你的问题的评论中已经说过了。

如果您希望能够访问父实例,请执行以下操作:

模块b

class B(object):
    def __init__(self, parent):
        self.parent = parent

    def say_hi(self):
        print 'Child says hi to his parent %s' % (
            self.parent.__class__.__name__
        )
        self.parent.say_hi()

模块a

from b import B

class A(object):
    def __init__(self):
        self.b = B(self)

    def say_hi(self):
        print 'Parent says hi!'

答案 1 :(得分:0)

如果将对象(a)传递给类(b),则可以直接调用它。

class a():
    def __init__(self):
        print"Made A"

    def test(self):
        print ">>A Test"

class b():
    def __init__(self,parent):
        print"Made B"
        self.parent = parent        
    def test(self):
        print ">>B Test"
        self.parent.test()

a = a()
a.test()
b = b(a)        
b.test()