как расшифровать ссылку? И как передать Объект класс в другой

Рейтинг: 0Ответов: 1Опубликовано: 24.02.2023

Я новичок в ООП Создал класс Дуальные числа(Аналог комплексных чисел).Где прописал возможность реализации основных алгебраических действий .Теперь нужно реализовать класс где будет реализовано +,-,,Transpose для матриц состоящих из Дуальных чисел . Как это правильно сделать? Для начала решил хотя бы инициализировать и посмотреть как будет выглядеть матрица из NUMPY , с моими объектами из класса и наткнулся на то что туда передается ссылка на объект ,а не он сам. Посоветуйте как можно расшифровать ссылку? А также смогу ли я вообще с помощью наследования передать "сущность" числа , чтоб в матрице были записаны числа в виде a + eb;

enter image description here Вот код

import math
import numpy as np
import cmath

class DualNumber():
    """Реализуем класс  дуальных чисел"""
    def __init__(self,real,dual):
        """Зададим само дуальное число"""
        self.real = real
        self.dual = dual

    def __add__(self, other):
        return DualNumber(self.real + other.real , self.dual + other.dual)

    def __sub__(self, other):
        return DualNumber(self.real - other.real, self.dual - other.dual)

    def __mul__(self, other):
        return DualNumber(self.real * other.real, self.dual * other.real + self.real * other.dual)

    def __truediv__(self, other):
        return DualNumber(self.real / other.real, (self.dual * other.real - self.real * other.dual) / (other.real * other.real))
    def __str__(self):
        if self.dual == 0:
            result = "%.2f+0.00\u03B5" % (self.real)
        elif self.real == 0:
            if self.dual >= 0:
                result = "0.00+%.2f\u03B5" % (self.dual)
            else:
                result = "0.00-%.2f\u03B5" % (abs(self.dual))
        elif self.dual > 0:
            result = "%.2f+%.2f\u03B5" % (self.real, self.dual)
        else:
            result = "%.2f-%.2f\u03B5" % (self.real, abs(self.dual))
        return result

    def Sin(self):
        """Возвращает значение дуального Синуса"""
        return DualNumber(math.sin(self.real), self.dual * math.cos(self.real))
    def Cos(self):
        """Возвращает значение дуального Косинуса"""
        return DualNumber(math.cos(self.real), - self.dual * math.sin(self.real))

    def InfoAboutNumber(self):
        """Возвращает значение Реальной и Дуальной части числа"""
        print("Реальная часть числа = " + str(self.real))
        print("Дуальная часть числа = " + str(self.dual))
class DualMatrix(DualNumber):
    """Реализуем класс  дуальных Матриц"""
    def __init__(self,matrix):
        self.matrix = matrix


DualNumber1 = DualNumber(2,1)
DualNumber2 = DualNumber(3,10)
x = DualNumber(2,1)
y = DualNumber(5,6)
print(x+y)
print(x.Cos())
a = np.array([DualNumber(2, 1), DualNumber(3, 10)])
print(a)
print(type(DualNumber(2, 1)))

Пытался расшифровать через (*) ; Не вышло

Ответы

▲ 0Принят

Смотрите, код Вы написали на Python, а не на С++ и даже на С++ ссылки не разименовывают. Ссылки для того и придумали, что-бы указатели не разименовывать. Для понимания вот коротенький код:

class My():

  def __init__(self, n):
    self.n = n

  def getN(self):
    return self.n


lst = [My(5)]

print(lst) # Получим список со ссылкой на класс My
print(lst[0].getN()) # Получим значение атрибута класса a == 5

В Вашем случае нужно по ссылке обратится к вашему экземпляру класса, Вы ему имя не дали потому у Вас есть только ссылка в массиве.

print(a[0].Sin())
print(a[1].InfoAboutNumber())