Форум сайта python.su
У тебя питон не правильный.
>>> isinstance(C, B) True
Онлайн
Отсюда можно сделать очевидный вывод - isinstance вообще нихрена не значит, это чисто прикладная вещь и судить по ней о механизме устройства интерпретатора не стоит.
Офлайн
> Отсюда можно сделать очевидный вывод
Если у тебя третий питон, то в нём будет другое объявление метакласса.
>>> class B(type): pass ... >>> class A(metaclass=B): pass ... >>> isinstance(A, B) True
Онлайн
RodegastПерегрузка есть не во всех языках. Инкапсуляцию ты не понимаешь, где-то пробелы.
См. мои сообщения выше относительно инкапсуляции и перегрузке операторов.
RodegastТы не понимаешь, что ты синтаксический сахар воспринимаешь как откровение века. Ничем метакласс от класса не отличается, просто его экземпляры - это классы. Что там в питоне понаписано про это разделение - это совсем не важно. Ты хочешь сказать, что метакласс - это не класс? А почему там слово класс тогда участвует? Вот ты даже об этом не думаешь.
Иди на OZON и купи каких нибудь умных книжек по Python-у. Как их прочитаешь, так и умничай, а то ты даже основы объектной модели не знаешь.
RodegastИ что ты понял про isinstance() ? Что они экземплярами друг друга являются?
Ты разницу между предком и экземпляром понимаешь или как?
Отредактировано py.user.next (Июнь 16, 2017 12:28:35)
Офлайн
Да плевать, вопрос вообще не про это. Если каждый класс в питоне является инстансом метакласса, то инстансом чего является класс type? А если у type есть метакласс, то инстансом чего он является? И так далее. Понятно, что когда-то мы докопаемся до сущности, у которой нет метакласса. Эта сущность создает все остальные классы. Авторы питона не стали заморачиваться и постановили, что формально такой сущностью является класс type, который есть инстанс сам себя. isinstance(type, type) == True Разумеется класс не может быть инстансом самого себя, это просто такое допущение от авторов, чтобы не пускать пользователей на уровень ниже классов. Если мы рассуждаем о том, как принято выражаться в питоне, то пусть будет по-твоему, пусть классы будут инстансами метакласса, мне все равно. Это вопрос терминологии, и он не влияет на устройство Вселенной. Если мы говорим о том, как это на самом деле работает, то от фабрики классов, которая сама не является классом мы никуда не денемся, просто из соображений логики. Таким образом все классы создаются одной функцией. И далеко за такой функцией ходить не надо, это функция type, которая исторически называется так же как тип type, и она же работает в метаклассах.
Офлайн
FishHookobject выше, чем type, в иерархии классов. Это доказано выше через функцию issubclass(). type - класс, производный от класса object. А класс object создан без всякого метакласса.
Если каждый класс в питоне является инстансом метакласса, то инстансом чего является класс type?
Отредактировано py.user.next (Июнь 16, 2017 12:39:33)
Офлайн
> Если бы ты прочитал первое сообщение топика, то ты бы увидел, что их учат не на питоне…
Но он то делает задание не на cpp, а на Python-е.
> Ты не понимаешь, что ты синтаксический сахар воспринимаешь как откровение века.
Реализацию метакласса без использования type или types.ClassType в студию!
> от фабрики классов, которая сама не является классом мы никуда не денемся, просто из соображений логики.
Ну так мы слишком далеко зайдём и начнём размышлять над устройством интерпретатора.
> object выше, чем type, в иерархии классов
>>> object.__class__ <type 'type'> >>> object.__class__ is type True
Отредактировано Rodegast (Июнь 16, 2017 14:36:18)
Онлайн
Вот, дорогие форумчане код. Задание я сдал на 5. Спасибо всем, кто помог. Хотя в большинстве вы спорите о своем)
import math 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) elif self.real == 0.0: return '{}i'.format(self.imag) else: return '{:.3f}{}{:.3f}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): # степень 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) A = [] C = [] calc = ComplexCalc() # Задание 1 for i in range(1, 4): # заполение массива 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) #Задание 2 b = [] for i in range(len(A)): b.append([]) for j in range(len(A)): if i == 0: b[i].append(A[j]) else: b[i].append(calc.pow(A[j], i)) print('Массив B:', b)
Офлайн