我试图访问类的方法,从中实例化另一个类,我的意思是,访问" 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类包含硬件的初始化。
答案 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()
但请注意,这表示您的各个班级之间的耦合程度非常高,这对我来说似乎很可疑,并且可能表明您的设计存在更深层次的缺陷。