Структура родительского дочернего класса Python

Предположим, у меня есть класс «композиция» и класс «слой». Предположим, что экземпляр класса слоя не может существовать без экземпляра класса композиции, а экземпляр класса композиции может иметь несколько экземпляров слоя. Методы класса слоя должны иметь доступ к членам класса композиции. Это не совсем наследование, потому что каждый экземпляр слоя должен «содержаться» в одном экземпляре класса композиции.

Например, если мой класс композиции состоит из трех членов «comp_width», «comp_height» и списка, называемого «Layers», каждый слой в списке должен иметь возможность вызывать свои собственные методы, которые имеют доступ к «comp_width» и «comp_height». "переменные.

Есть ли способ настроить эту конкретную структуру классов в Python? Если да, то можете ли вы привести пример? Я не уверен, что это можно сделать.

__init__() вашего класса «слой» должен иметь параметр, определяющий содержащую «композицию», который, возможно, будет сохранен в self.composition. Другие методы могут использовать self.composition.comp_width и т. д.

jasonharper 08.10.2018 05:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
146
1

Ответы 1

Один из подходов - создать layer с уже существующим composition. Это позволит вам передать объект composition каждому объекту layer во время создания.

class Layer:

    def __init__(self, composition, name):
        if not isinstance(composition, Composition):
            raise TypeError(
                'instance of the layer class cannot exist without an instance '
                'of the composition class')
        self.composition = composition
        self.name = name

    def __repr__(self):
        return self.name

    def get_composition_info(self):
        return (
            'composition [{}] with size [{} x {}] and layers {}'
            .format(
                self.composition.name,
                self.composition.height,
                self.composition.width,
                self.composition.layers))


class Composition:

    def __init__(self, name, height, width):
        self.layers = list()
        self.name = name
        self.height = height
        self.width = width

    def __repr__(self):
        return self.name

    def create_layer(self, name):
        layer = Layer(self, name)
        self.layers.append(layer)
        return layer


comp = Composition('my_composition_1', 10, 2)
l_1 = comp.create_layer('layer_1')
l_2 = comp.create_layer('layer_2')

print(comp)
print(comp.layers)
print(l_1)
print(l_1.get_composition_info())

Вывод print()s:

my_composition_1
[layer_1, layer_2]
layer_1
composition [my_composition_1] with size [10 x 2] and layers [layer_1, layer_2]

Другие вопросы по теме