2011-12-13 54 views
2

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

基本上,这个工程(类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',则不能再获取成员类来访问其父类的成员和函数。

是否有任何方法获得原始行为而不会将成员类放在与父类相同的文件中?

+0

你使用的是什么python版本?在2.7中它不起作用,因为你正在传递A(类),其中实例是预期的 – soulcheck 2011-12-13 21:49:12

+0

你的缩进是否正确?它似乎不是。 “B类可以访问父类的方法,如下所示:A.say_hi(A)”根本没有任何意义。由于`A.say_hi(A)`是非常非常奇特的Python。你对继承感到困惑吗?这是你的问题吗? – 2011-12-13 22:36:05

回答

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!' 
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()