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 ответа
На самом деле в вашем примере вы не можете получить доступ к экземпляру A в вашем классе B. И код 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!'
Если вы передадите объект (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()