Python не имеет (или не нуждается) в «параметризованных классах», поэтому трудно привести примеры их в Python ;-).Метакласс - это просто «класс класса»: обычно type
(если в Py2, как вы помните, сделать класс новым, наследуя от object
, или какой-либо другой встроенный тип, или другой новый-style class - классы старого стиля являются устаревшим артефактом в Py2, к счастью, исчезли в Py3, и в идеале вы должны просто забыть о них).Вы можете создать собственный метакласс (обычно подкласс type
) для нескольких сложных целей, но маловероятно, что вам когда-либо понадобится для (особенно если учесть, что, начиная с Python 2.6, большая часть того, что раньше требовалосьпользовательский метакласс теперь можно сделать проще с помощью декоратора классов).
Для любого класса C type(C)
является его метаклассом.
Параметризованный класс - это совершенно другое понятие.В Python ближе всего можно найти фабричную функцию, которая создает и возвращает класс на основе своих аргументов:
def silly(n):
class Silly(object):
buh = ' '.join(n * ['hello'])
return Silly
Silly1 = silly(1)
Silly2 = silly(2)
a = Silly1()
print(a.buh)
b = Silly2()
print(b.buh)
выведет
hello
hello hello
Опять же, это определенно не то, что вам часто нужно - создание нескольких классов, которые отличаются только одним или несколькими аргументами.В любом случае, как вы можете видеть, это не имеет абсолютно никакого отношения к классу классов (метакласс AKA), который в этом примере всегда равен type
(и почти в каждом более реалистичном примере, о котором я мог подумать - я просто решил датьпростой пример, где смысл этого сделать трудно различим, а не реалистичный и поэтому обязательно очень сложный; -).