Sólo tiene que llamar el "tipo", construida en el uso de tres parámetros, así:
ClassName = type("ClassName", (Base1, Base2,...), classdictionary)
actualización como se indica en el comentario de abajo esta no es la respuesta a esta pregunta en absoluto. Lo mantendré sin recuperar, ya que hay indicios de que algunas personas llegan aquí tratando de crear clases dinámicamente, que es lo que hace la línea de arriba.
Para crear un objeto de una clase haya una referencia también, como poner en la respuesta aceptada, uno sólo tiene que llamar a la clase:
instance = ClassObject()
El mecanismo para la creación de instancias es así:
Python no utiliza la palabra clave new
que usan algunos idiomas, sino que su modelo de datos explica el mecanismo utilizado para crear un instantance de una clase cuando se llama con la misma sintaxis que cualquier otra llamada:
Su clase 'Se invoca el método(en el caso de una clase, su clase es la "metaclase", que generalmente es la incorporada en type
). El comportamiento normal de esta llamada es invocar el método (pseudo) estático __new__
en la clase que se está instanciando, seguido de su __init__
. El método __new__
es responsable de asignar memoria y tal, y normalmente lo hace el __new__
de object
, que es la jerarquía de clase raíz.
Así llamando ClassObject()
invoca ClassObject.__class__.call()
(que normalmente será type.__call__
) este método __call__
recibirá classObject a sí mismo como el primer parámetro - una implementación de Python puro sería así: (la versión CPython es, por supuesto, hecho en C, y con una gran cantidad de código extra para cornercases y optimizaciones)
class type:
...
def __call__(cls, *args, **kw):
constructor = getattr(cls, "__new__")
instance = constructor(cls) if constructor is object.__new__ else constructor(cls, *args, **kw)
instance.__init__(cls, *args, **kw)
return instance
(que no recuerdo haber visto en los documentos de la justificación exacta (o mecanismo) para suprimir parámetros adicionales a la raíz __new__
y pasarlo a otras clases - pero es lo que sucede "en la vida real" - si se llama a object.__new__
con cualquier parámetro adicional ERS plantea un error de tipo - sin embargo, cualquier implementación personalizada de un __new__
obtendrá los parámetros extra normalmente)
¿Qué? 'instance = Class()' ... –
Supongo que quieres crear dinámicamente una nueva clase. No es un objeto de una clase dada. – jsbueno
nueva instancia significa un nuevo objeto con su propio espacio en la memoria. la mayoría de los lenguajes usan una palabra clave 'nueva' para que sea explícito que el objeto es nuevo y que las propiedades de la nueva instancia (del objeto) no se referencian/comparten con otra instancia. – BillR