J'essaye de traduire du code python en code scala. Je suis donc un noob total en Python.
Mais pourquoi certaines classes ont-elles un objet comme paramètre mais ne l'utilisent jamais explicitement? Quelle est la raison de l'avoir comme paramètre en premier lieu?
Exemple:
class Table(object)
Merci pour votre temps.
Réponses:
En Python2, cela déclare
Table
être une classe de style nouveau (par opposition à une classe "classique"). En Python3, toutes les classes sont des classes de nouveau style, donc ce n'est plus nécessaire.Les nouvelles classes de style ont quelques attributs spéciaux qui manquent aux classes classiques.
De plus, les propriétés et super ne fonctionnent pas avec les classes classiques.
En Python2, c'est une bonne idée de créer toutes les classes des classes de style nouveau. (Bien que de nombreuses classes de la bibliothèque standard soient encore des classes classiques, par souci de compatibilité descendante.)
En général, dans une déclaration telle que
Foo
est déclaré comme une classe héritant des classes de baseBase1
etBase2
.object
est la mère de toutes les classes en Python. C'est une classe de style nouveau, donc hériter deobject
créeTable
une classe de style nouveau.la source
object
dans la liste des bases de classe) dans le tutoriel .object
. Les deux instructions réunies impliquent que vous n'avez pas besoin d'inclureobject
dans la liste des bases de classes en Python3 puisque toutes les classes sont des classes de nouveau style en Python3.La
Table
classe étend une classe appeléeobject
. Ce n'est pas un argument. La raison pour laquelle vous voudrez peut-être étendreobject
explicitement est que cela transforme la classe en une classe de nouveau style. Si vous ne le spécifiez pas explicitementobject
, jusqu'à Python 3, il sera par défaut une classe à l'ancienne. (Depuis Python 3, toutes les classes sont de style nouveau, que vous les étendiez explicitementobject
ou non.)Pour plus d'informations sur les classes de style nouveau et ancien, veuillez consulter cette question .
la source
Il suffit de noter que la distinction entre les classes «nouveau style» et «ancien style» est spécifique à Python 2.x; en 3.x, toutes les classes sont «nouveau style».
la source
class Table et class Table (objet) ne sont pas différents pour Python.
Ce n'est pas un paramètre, il s'étend de l'objet (qui est la classe de base comme beaucoup d'autres langages).
Tout ce qu'il dit, c'est qu'il hérite de tout ce qui est défini dans "objet". C'est le comportement par défaut.
la source
object
sont le comportement par défaut dans Python 3 uniquement. En python 2, un objet d'extension de classe a des attributs qu'une classe qui n'étend pas d'objet n'aura pas.object est le type d'objet de classe le plus basique défini en python. Les attributs de l'objet peuvent être vus comme ci-dessous
** >>> dir (objet)
[ ' Classe ', ' delattr ', ' doc ', ' Format ', ' getattribute ', ' hash ', ' initialisation ', ' nouveau ', ' réduire ', ' reduce_ex ', ' rééd ', ' setattr ', ' sizeof ',' str ',' subclasshook '] **
Donc, Table (objet) n'est qu'un héritage.!
la source
1) Nom de classe (objet): 2) nom de classe: Ils sont tous les deux identiques mais les premiers sont bien meilleurs en termes d'écriture, cela a l'air mieux tout en héritant d'autres classes à une autre, cela semble homogène.
Comment pareil? Ainsi, chaque chose en Python est sous objet signifie que tout en Python a la propriété d'objet, si elle est écrite ou non, elle le comprendra. Dans la première, nous le disons explicitement dans la seconde, nous ne l'avons pas fait.
la source