Форум сайта python.su
0
Коллеги, поясню возникновение задачи. Пишу программу для численного решения задач с помощью метода конечных элементов (МКЭ). Класс, описывающий стандартный треугольный конечный элемент (КЭ), возвращает матрицу чисел 6х6. Наследник от него - класс, описывающий КЭ пластины, возвращает матрицу 9х9. А класс, описывающий треугольный КЭ оболочки, должен вернуть матрицу 18х18, состоящую из двух предыдущих матриц. Так вот у меня возникла проблема, как при формировании матрицы оболочечного КЭ получить матрицы родительских классов? Если действовать тем способом, который я смоделировал вышеприведенным кодом, то возникают ошибки, связанные с тем, что в объектах от родительских классов значения size и freedom приравниваются к значениям дочернего класса… Ну и все не работает. Как добиться того, чтобы в родительском классе не менялось значение его свойств, заданных в его конструкторе?
Офлайн
294
SeregaGomen и чем вас не устраивает мой вариант? у вас size и freedom атрибуты инстанса, и чтобы получить к ним доступ вам нужно создать соответствующие инстансы. В классе наследнике вы переопределяете атрибуты инстанса и инстанс наследника будет иметь уже новые атрибуты, но инстанс родителя будет сохранять свои атрибуты. Если хотите чтобы size и freedom были атрибутами класса так обьявляте их атрибутами класса.
SeregaGomenя вас не понимаю от слова “совсем”, в родительском классе ничего не меняется, вы меняете их в наследнике, ваша фееричная конструкция типа “A.get_size(self)” в классе “С” вызывает метод класса “А”, но передает ему первым аргументом инстанс класса “С” в котором значения size и freedom соответвуют классу “С”. если хотите чтобы вам вернуло значения класса “А” так и передавайте ему ссылку на экземпляр класса “А”.
Как добиться того, чтобы в родительском классе не менялось значение его свойств, заданных в его конструкторе?
[code python][/code]
Отредактировано PEHDOM (Ноя. 29, 2018 21:21:36)
Офлайн
0
Спасибо за ответ, но тут есть нюанс. В моем случае код
a = A() b = B()
Офлайн
294
SeregaGomenНе приведет, если брать существующий пример, то “накладные расходы” это словарь с парой ключей, по сравнению с матрицей 18х18 это вообще ничто. Классы в пайтоне работают очень экономно и не создают сущности сверх необходимого. Или приведите это самое “большое количество параметров которые уже фактически есть в текущем объекте” чтобы мы понимали о чем речь.
Спасибо за ответ, но тут есть нюанс. В моем случае код
a = A()
b = B()
привед к значительным накладным расходам, т.к. создание этих объектов требует настройки большого количества параметров, которые уже фактически есть в текущем объекте (который вызывает этот код).
[code python][/code]
Офлайн