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")
不过,如果类变得很大,这样就会变得很麻烦,所以我把额外的类放在不同的文件里,并且在需要的时候导入它们。这样做的问题是,如果我尝试用'import B.py'来导入定义在外部的B类,子类就无法访问父类的成员和方法了。
有没有什么办法可以在不把子类放在和父类同一个文件里的情况下,恢复原来的访问方式呢?
2 个回答
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()
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!'