Estoy tratando de traducir algo de código Python al código Scala. Así que soy un novato total en Python.
Pero, ¿por qué algunas clases tienen objeto como parámetro pero nunca lo usan explícitamente? ¿Cuál es el motivo para tenerlo como parámetro en primer lugar?
Ejemplo:
class Table(object)
Gracias por tu tiempo.
Respuestas:
En Python2, esto declara
Table
ser una clase de nuevo estilo (a diferencia de la clase "clásica"). En Python3 todas las clases son clases de estilo nuevo, por lo que esto ya no es necesario.Las clases de estilo nuevo tienen algunos atributos especiales de los que carecen las clases clásicas.
Además, las propiedades y super no funcionan con clases clásicas.
En Python2 es una buena idea hacer que todas las clases sean clases de estilo nuevo. (Aunque muchas clases en la biblioteca estándar siguen siendo clases clásicas, en aras de la compatibilidad con versiones anteriores).
En general, en una declaración como
Foo
se declara como una clase heredada de las clases baseBase1
yBase2
.object
es la madre de todas las clases en Python. Es una clase de estilo nuevo, por lo que heredar deobject
haceTable
una clase de estilo nuevo.fuente
object
de la lista de bases de clases) en el tutorial .object
. Las dos declaraciones juntas implican que no es necesario incluirlasobject
en la lista de bases de clases en Python3 ya que todas las clases son clases de estilo nuevo en Python3.La
Table
clase está ampliando una clase llamadaobject
. No es un argumento. La razón por la que puede querer ampliarobject
explícitamente es que convierte la clase en una clase de nuevo estilo. Si no especifica explícitamente que se extiendeobject
, hasta Python 3, se convertirá de forma predeterminada en una clase de estilo antiguo. (Desde Python 3, todas las clases son de estilo nuevo, ya sea que las extienda explícitamenteobject
o no).Para obtener más información sobre las clases de estilo nuevo y antiguo, consulte esta pregunta .
fuente
Solo tenga en cuenta que la distinción de clase "estilo nuevo" frente a "estilo antiguo" es específica de Python 2.x; en 3.x, todas las clases son de "estilo nuevo".
fuente
class Table y class Table (objeto) no son diferentes para Python.
No es un parámetro, se extiende desde el objeto (que es la clase base como muchos otros lenguajes).
Todo lo que dice es que hereda lo que esté definido en "objeto". Este es el comportamiento estándar.
fuente
object
es el comportamiento predeterminado solo en Python 3. En python 2, un objeto de extensión de clase tiene atributos que no tendrá una clase que no extienda el objeto.object es el tipo más básico de objeto de clase definido en python. Los atributos del objeto se pueden ver a continuación
** >>> dir (objeto)
[' class ', ' delattr ', ' doc ', ' format ', ' getattribute ', ' hash ', ' init ', ' new ', ' reduce ', ' reduce_ex ', ' repr ', ' setattr ', ' sizeof ',' str ',' subclasshook '] **
Entonces, Table (objeto) es solo herencia.!
fuente
1) Nombre de la clase (objeto): 2) Nombre de la clase: Ambos son iguales pero primero uno bastante mejor en términos de escritura, se ve mejor mientras hereda otras clases a otra, se ve homogéneo.
¿Qué igual? Entonces, todo en Python está incluido en el objeto, significa que todo en Python tiene propiedad de objeto, si escribe o no, lo entenderá. En primer lugar lo decimos explícitamente y en segundo no lo hicimos.
fuente