Python-访问父成员

Python-访问父成员,python,class,import,namespaces,member,Python,Class,Import,Namespaces,Member,当我试图弄清楚当成员类是外部模块的一部分时,如何让它们从父类访问数据时,我在这里遇到了停顿 基本上,这是可行的(B类可以访问父类的方法,如:A.say_hi(A)): 然而,如果类开始变得特别大,这可能会变得非常混乱,所以我一直在将我的附加类放入文件中并将它们内联导入。问题是,如果在中定义了类B时尝试使用“import B.py”,则无法再让成员类访问其父类的成员和函数 有没有办法在不将成员类与父类放在同一个文件中的情况下获得原始行为?实际上,在您的示例中,您无法访问类B中A的实例。代码A。说“

当我试图弄清楚当成员类是外部模块的一部分时,如何让它们从父类访问数据时,我在这里遇到了停顿

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

然而,如果类开始变得特别大,这可能会变得非常混乱,所以我一直在将我的附加类放入文件中并将它们内联导入。问题是,如果在中定义了类B时尝试使用“import B.py”,则无法再让成员类访问其父类的成员和函数


有没有办法在不将成员类与父类放在同一个文件中的情况下获得原始行为?

实际上,在您的示例中,您无法访问类B中A的实例。代码
A。说“嗨(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!'
如果将对象(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()

您使用的是什么python版本?在2.7中,它不起作用,因为您正在传递一个(类),其中需要一个实例。缩进是否正确?看起来不是。“B类可以访问的是父类的方法,例如:A.say_hi(A)”根本没有任何意义。因为A.say_hi(A)是非常非常特别的Python。你对继承感到困惑吗?这是你的问题吗?@soulcheck它在py3k中工作(缩进如帖子所示),他可以从代码中的“B”访问“A”,因为有一个副作用:当从“A”的实例最终调用B中的函数时,类A将在模块全局名称空间中可用。他可以访问类A,但不能访问A的实例,这是重要的区别。如果不是循环导入,那么访问模块b中的类A同样容易,只需导入A就可以了。
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()