Sintaxis de definición de clases de Python

90

¿Hay alguna diferencia entre

class A:
    ...

y

class A():
    ...

Me acabo de dar cuenta de que un par de mis clases se definen como las primeras y funcionan bien. ¿El paréntesis vacío hace alguna diferencia?

Falmarri
fuente

Respuestas:

22

Este último es un error de sintaxis en versiones anteriores de Python. Sin objectembargo, en Python 2.x debe derivar siempre que sea posible, ya que varias características útiles solo están disponibles con clases de nuevo estilo (derivar de objectes opcional en Python 3.x, ya que las clases de nuevo estilo son las predeterminadas allí).

Ignacio Vázquez-Abrams
fuente
7
Ya no es cierto en Python 3; todo lo que se deriva de objecttonterías se soluciona automáticamente.
temporary_user_name
4
¿ class A()Alguna vez fue un error de sintaxis? Los documentos de Python 1.4 dicen que está bien, y esos son los documentos más antiguos que aún están disponibles en python.org.
user2357112 apoya a Monica
86

Si bien puede que no sea sintácticamente incorrecto usar los paréntesis vacíos en una definición de clase, los paréntesis después de una definición de clase se usan para indicar herencia, por ejemplo:

class A(baseClass):
    ...

En Python, la sintaxis preferida para una declaración de clase sin clases base es simplemente:

class A:
    ...

No use paréntesis a menos que esté subclasificando otras clases.

Los documentos sobre el tema deberían brindarle una mejor comprensión de cómo declarar y usar clases en Python.

Rafe Kettler
fuente