python как унаследовать параметр во все классы

у меня есть дочерние классы, всего их 4 в качестве примера один - child1().

Также есть главный класс, который инициализируется, и в который передается некий param.

Вопрос 1: Как при инициализации главного класса прокинуть/передать param в дочерние классы, так что бы дочерний класс мог узнать значение из главного как на примере printParam()?

Вопрос 2: Таких параметров будет около 10-ти, также у дочернего класса может быть еще дочерний класс.

Что стоит почитать/посмотреть чтобы лучше разобраться в этом?

class child1(): #Унаследовать param из main класса
def __init__(self): 
        self.param = param 

def printParam(self):
        print(self.param)

class MainClass(child1):
    def __init__(self, param): 
        self.param = param

mn = MainClass(param='param')

Ответы (1 шт):

Автор решения: S. Nick

Попробуйте так:

class Child1(): 
    def __init__(self, parent=None):
        super().__init__()
        
        self.objectName = 'child1' 
        self.param = parent.param 

    def print_param(self):
        print(f'{self.objectName:>8}: {self.param}')
        
        
class Child2_1(): 
    def __init__(self, parent=None):
        super().__init__()
        
        self.objectName = 'child2_1' 
        self.param = parent.param 

    def print_param(self):
        print(f'{self.objectName:>8}: {self.param}')
        
        
class Child2(): 
    def __init__(self, parent=None):
        super().__init__()
        
        self.objectName = 'child2' 
        self.param = parent.param 
        
        self.child2_1 = Child2_1(parent)

    def print_param(self):
        print(f'{self.objectName:>8}: {self.param}')
        

class MainClass():
    def __init__(self, param): 
        self.param = param
        
        self.child1 = Child1(self)
        
        self.child2 = Child2(self)


mn = MainClass(param='param777')

mn.child1.print_param()
mn.child2.print_param()
mn.child2.child2_1.print_param()

введите сюда описание изображения


Update:

class Child1(): 
    def __init__(self, parent=None):
        super().__init__()
        
        self.objectName = 'child1' 
        self.parent = parent

    def print_param(self):
        print(f'{self.objectName:>8}: {self.parent.param}')
        
        
class Child2_1(): 
    def __init__(self, parent=None):
        super().__init__()
        
        self.objectName = 'child2_1' 
        self.parent = parent

    def print_param(self):
        print(f'{self.objectName:>8}: {self.parent.param}')
        
        
class Child2(): 
    def __init__(self, parent=None):
        super().__init__()
        
        self.objectName = 'child2' 
        self.parent = parent
        
        self.child2_1 = Child2_1(parent)

    def print_param(self):
        print(f'{self.objectName:>8}: {self.parent.param}')
        

class MainClass():
    def __init__(self, param): 
        self.param = param
        
        self.child1 = Child1(self)
        
        self.child2 = Child2(self)


mn = MainClass(param='param777')

mn.child1.print_param()
print()

mn.param = 555
mn.child2.print_param()
mn.child2.child2_1.print_param()
mn.child1.print_param()
print()

mn.param = 567
mn.child2.child2_1.print_param()

введите сюда описание изображения

→ Ссылка