访问类的方法,从中实例化另一个类

时间:2014-10-16 10:06:36

标签: python class instances

我试图访问类的方法,从中实例化另一个类,我的意思是,访问" parent"实例而不创建它的新实例。

class A():  
    def __init__(self):
        ...  
        b_instance = B()  
        ...

class B():
    def __init__(self):  
        ...     
    def function1(self):  
        ...  
    def function2(self):  
        C().run() # I need to use class C functionalities
        ...  

class C():  
    def __init__(self):  
        ...  
    def run(self):  
        classB.function1() #I can't access to these methods without instantiating again class B  


# I have to execute:
>>> a = A()
>>> a.b_instance.function2()

对不起,如果我没有解释清楚,有点混乱。如果您需要任何澄清,请不要犹豫。

EDIT。

在C类中,完成了对B类方法执行的特定处理。不可能在C内再次实例化,因为B类包含硬件的初始化。

2 个答案:

答案 0 :(得分:0)

这可以从其他类访问类方法。 如果使用各种类型的功能,请使用实例方法,类方法和静态方法。

class A():  
    def __init__(self):
        print 'in __init__'
        self.b_instance = B() # making an instance of class  
        #self.b_instance.function2()

class B():
    def __init__(self):  
        print 'in __init__, B'
    @staticmethod
    def function1():  
        print 'func1'

    def function2(self):  
        C().run() # I need to use class C functionalities

         # if you trying to access `run` method of `class C` make
          # it instance bound method"""

class C():  
    def __init__(self):  
        pass    
    def run(self):
        print 'in run'
        B.function1() #I can't access to these methods without instantiating again class B  
      #you are passing class instance as `B` while calling function1
       # so make it either classmethod `@classmethod` or `static method`

# I have to execute:
a = A()
a.b_instance.function2() # calling b_instance variable of class A

答案 1 :(得分:0)

目前还不清楚你究竟想要实现什么,但这里有一个解决方法:

class A():  
    def __init__(self):
        ...  
        b_instance = B()  
        ...

class B():
    def __init__(self):  
        ...     
    def function1(self):  
        ...  
    def function2(self):  
        C().run(self) # pass class B instance to C instance run method
        ...  

class C():  
    def __init__(self):  
        ...  
    def run(self, classB): # note additional parameter
        classB.function1()

但请注意,这表示您的各个班级之间的耦合程度非常高,这对我来说似乎很可疑,并且可能表明您的设计存在更深层次的缺陷。