Форум сайта python.su
186
> Так это обычная операция.
Вот. Об этом я тебе и говорил.
> Но вот для комплесного числа умножение на вектор - не обычная операция, а специфическая
Где ты тут увидел умножение на вектор?
для выполнения следующих операций над комплексными числами
Сложение
Вычитание
Умножение
Деление
Вычисление модуля комплексного числа
Возведение комплексного числа в степень n(n-натуральное).
Офлайн
857
FishHook
вынеси статический метод из класса не делая атрибут публичным
>>> class A: ... @staticmethod ... def m(): ... print('hello') ... >>> A().m() hello >>>
>>> class A: ... pass ... >>> def m(): ... print('hello') ... >>> m() hello >>>
RodegastЯ смотрю в будущее. Препод увидит, что он операции зашил в комплексное число, и даст ему задание такое, чтобы он начал зашивать его тоже в класс и оно всё поломало ему там. Я же встречал уже такие вещи. Подозрение вызывают операции возведения в степень.
Где ты тут увидел умножение на вектор?
>>> (1+2j) ** (1+2j) (-0.22251715680177267+0.10070913113607541j) >>>
RodegastЯ ничего не путаю.
> Ты перманентно путаешь понятия класс и объект.
Я это тоже заметил.
Отредактировано py.user.next (Июнь 15, 2017 00:40:43)
Офлайн
186
> Препод увидит, что он операции зашил в комплексное число, и даст ему задание такое, чтобы он начал зашивать его тоже в класс и оно всё поломало ему там.
Ну ты прямо Ванга. Ещё раз повторяю: когда это случится, тогда он и будет писать для этого функцию, “стандартные” операции в любом случае реализовываться через перегрузку операторов.
> Берём Basic или JavaScript и думаем, как на нём сделать комплексные числа в полной мере, но чтобы не мешать всё подряд в одну кучу.
Если ты хочешь выйти за рамки, то мы может взять Haskell. Как в нём операторы перегружаются я тебе уже показывал.
> Я ничего не путаю.
Тогда объясни нам чем класс отличается от экземпляра класса.
Офлайн
857
RodegastЯ таких пацанов видел штук сто. Ему даёшь решение, а он на следующий день приходит и говорит, что препод додал ещё. Препод же видит, что он не сам делал. Так вот баб преподы жалеют, бабе можно какую-нибудь простую хрень дать, а этих дуплят по полной, пока не убедятся, что он им любое решение принесёт. И чтобы препод не подумал, что он родил этот класс еле-еле со встроенными методами, тут сразу делается разделение. Понимаешь, его преподу никто такой код не принесёт, потому что это знать надо - как правильно разделить и зачем. Препод посмотрит и подумает “что-то здесь не то, я их вроде так не учил, а он так делает” и не станет связываться.
Ну ты прямо Ванга.
RodegastНет, я получаю унифицированное решение. Если в каком-то языке нет переопределения операций или даже просто методов, нужно такое решение, которое легко перевести на такой язык. В частности в C нет таких встроенных методов и вообще методов нет, но C часто используется в образовании, поэтому надо написать что-то пригодное и для C.
Если ты хочешь выйти за рамки, то мы может взять Haskell.
RodegastКласс может быть экземпляром класса. Так что это всё равно что спросить “чем класс отличается от себя самого?”.
Тогда объясни нам чем класс отличается от экземпляра класса.
Офлайн
186
> а этих дуплят по полной, пока не убедятся, что он им любое решение принесёт.
И правильно делают.
> Нет, я получаю унифицированное решение.
Ты получаешь говнокод.
> Класс может быть экземпляром класса.
Нет. Класс это экземпляр метакласса.
Офлайн
568
RodegastНичего подобного. Метакласс - это фабрика классов, метаклассом может быть и функция(внезапно!!) и даже лямбда(!!!!).
Нет. Класс это экземпляр метакласса.
Офлайн
568
py.user.nextИ пример есть?
Класс может быть экземпляром класса.
Офлайн
186
>> Класс это экземпляр метакласса.
> Ничего подобного. Метакласс - это фабрика классов, метаклассом может быть и функция(внезапно!!) и даже лямбда(!!!!).
>>> class A(object): ... pass ... >>> type(A) <type 'type'> >>> class B(type): ... pass ... >>> class C(object): ... __metaclass__ = B ... >>> type(C) <class '__console__.B'> >>> isinstance(C, B) True >>> type(C) == B True
Отредактировано Rodegast (Июнь 15, 2017 22:31:09)
Офлайн
0
from math import cos, sin, sqrt, atan2 class Complex: #Класс комплексных чисел def __init__(self, real, imag): self.real = real self.imag = imag def __str__(self): # Строковое представление объекта числа sign = '+' if self.imag >= 0 else '' if self.imag == 0: return '{}'.format(self.real) else: return '{}{}{}i'.format(self.real, sign, self.imag) def __repr__(self): # Представление в сыром виде объекта числа sign = '+' if self.imag >= 0 else '' if self.imag == 0: return '{}'.format(self.real) return '{}{}{}i'.format(self.real, sign, self.imag) class ComplexCalc: def add(self, c1, c2): # сложение real = c1.real + c2.real imag = c1.imag + c2.imag return Complex(real, imag) def sub(self, c1, c2): # вычитание real = c1.real - c2.real imag = c1.imag - c2.imag return Complex(real, imag) def mul(self, c1, c2): # умножение real = c1.real * c2.real - c1.imag * c2.imag imag = c1.imag * c2.real + c1.real * c2.imag return Complex(real, imag) def truediv(self, c1, c2): # деление real = (c1.real * c2.real + c1.imag * c2.imag) / ((c2.real ** 2) + (c2.imag ** 2)) imag = (c1.real * c2.real - c1.imag * c2.imag) / ((c2.real ** 2) + (c2.imag ** 2)) return Complex(real, imag) def abs(self, c): return (c.real ** 2 + c.imag ** 2) ** 0.5 def pow(self, c, n): # степень phi = atan2(c.imag, c.real) r = sqrt(c.real * c.real + c.imag * c.imag) R = r ** n Phi = n * phi real = R * cos(Phi) imag = R * sin(Phi) return Complex(real, imag) A = [] C = [] calc = ComplexCalc() for i in range(1, 10): # заполение массива num = Complex(i, i) A.append(num) print('Массив А', A) for i in range(len(A)): # вычисление массива С if i == 0: C.append(calc.abs(A[i + 1])) elif i == (len(A) - 1): C.append(calc.abs(A[i - 1])) else: C.append(calc.add(calc.abs(A[i - 1]), calc.abs(A[i + 1]))) print('Массив C:', C)
Отредактировано AsphaltHero (Июнь 15, 2017 20:35:22)
Офлайн
0
Rodegast
FishHook
py.user.nextПодскажете?
Офлайн