FishHook
И пример есть?
Внезапно и незамысловато
>>> class A:
... pass
...
>>> type(A)
<class 'type'>
>>> type
<class 'type'>
>>> isinstance(A, type)
True
>>> A.__class__
<class 'type'>
>>>
https://docs.python.org/3/library/stdtypes.html#type-objectsRodegast
Ты получаешь говнокод.
Это с чего ты взял? Я бы посмотрел, как ты, имея одну операцию над комплексными числами, делал бы дополнительно другую такую же операцию, немного отличающуюся от этой. Вот куда бы ты её засунул, если в самом числе помещается только одна? Вот ты бы засунул её в число под именем, а потом бы отличить их не мог друг от друга. Я просто это представляю, потому что видал такое. Другое дело, когда у тебя целый калькулятор специальный есть для таких других операций, в нём не запутаешься.
Rodegast
Класс это экземпляр метакласса.
Метакласс - это просто красивое название для класса. Нет никаких метаклассов, это просто название. Как устроен класс - неизвестно, так как это чёрный ящик. Поэтому различия между int и float будут такие же как и различия между класс и метакласс.
AsphaltHero
Доведите до ума пожалуйста функцию pow? Результат не очень выдает.
Поправил только синтаксис (для питона многое не принято делать синтаксически).
>>> import math
>>>
>>> class Complex:
... def __init__(self, real, imag):
... self.real = real
... self.imag = imag
... def __str__(self):
... sign = '+' if self.imag >= 0 else ''
... return '{}{}{}i'.format(self.real, sign, self.imag)
... __repr__ = __str__
...
>>> class ComplexCalc:
... @staticmethod
... def add(c1, c2):
... real = c1.real + c2.real
... imag = c1.imag + c2.imag
... return Complex(real, imag)
... @staticmethod
... def sub(c1, c2):
... real = c1.real - c2.real
... imag = c1.imag - c2.imag
... return Complex(real, imag)
... @staticmethod
... def mul(c1, c2):
... real = c1.real * c2.real - c1.imag * c2.imag
... imag = c1.imag * c2.real + c1.real * c2.imag
... return Complex(real, imag)
... @staticmethod
... def abs(c):
... return (c.real ** 2 + c.imag ** 2) ** 0.5
... @staticmethod
... def pow(c, n):
... if n < 1 or int(n) != n:
... raise ValueError(
... 'power should be natural (integer from 1 to +inf): '
... + str(n))
... phi = math.atan2(c.imag, c.real)
... r = (c.real ** 2 + c.imag ** 2) ** 0.5
... rpn = r ** n
... nphi = n * phi
... real = rpn * math.cos(nphi)
... imag = rpn * math.sin(nphi)
... return Complex(real, imag)
...
>>> calc = ComplexCalc()
>>> calc.add(Complex(1, 2), Complex(3, 4))
4+6i
>>> calc.sub(Complex(1, 2), Complex(3, 4))
-2-2i
>>> calc.mul(Complex(1, 2), Complex(3, 4))
-5+10i
>>> calc.abs(Complex(3, 4))
5.0
>>> calc.pow(Complex(1, 2), 10)
236.99999999999716-3116.000000000002i
>>>
То, что оно длинные дроби выдаёт, это можно поменять внутри класса Complex(), сделав там округление, и только при выводе представления (чтобы точность самого числа не терять).