une La classe Python hérite de l'objet




une class python (6)

Oui, c'est un objet 'nouveau style'. C'était une fonctionnalité introduite dans python2.2.

Les objets de style nouveau ont un modèle objet différent des objets classiques, et certaines choses ne fonctionneront pas correctement avec les objets de style ancien, par exemple, super() , @property et les descripteurs. Voir cet article pour une bonne description de ce qu'est une nouvelle classe de style.

SO lien pour une description des différences: Quelle est la différence entre l'ancien style et les nouvelles classes de style en Python?

Y a-t-il une raison pour qu'une déclaration de classe hérite d'un object ?

Je viens de trouver du code qui fait cela et je ne peux pas trouver une bonne raison pour cela.

class MyClass(object):
    # class code follows...

Python 3.x:
class MyClass(object): = classe de style nouveau
class MyClass: = classe de style nouveau (hérite implicitement de l'objet)

Python 2.x:
class MyClass(object): = classe de style nouveau
class MyClass: = CLASSE DE STYLE ANCIEN

Explication:

Lorsque vous définissez des classes de base dans Python 3.x, vous êtes autorisé à supprimer l'objet de la définition. Cependant, cela peut ouvrir la porte à un problème très difficile à suivre ...

Python a introduit des classes de style nouveau dans Python 2.2, et maintenant les classes de style ancien sont vraiment anciennes. La discussion des classes de style ancien est enterrée dans les documents 2.x et inexistante dans les documents 3.x.

Le problème est, la syntaxe pour les classes de style ancien dans Python 2.x est la même que la syntaxe alternative pour les classes de style nouveau dans Python 3.x. Python 2.x est toujours très utilisé (par exemple, GAE, Web2Py), et tout code (ou codeur) apportant involontairement des définitions de classes de style 3.x dans le code 2.x va se retrouver avec des objets de base sérieusement obsolètes. Et parce que les classes à l'ancienne ne sont sur le radar de personne, ils ne sauront probablement pas ce qui les a frappés.

Donc, épelez le long chemin et sauvez quelques développeurs 2.x les larmes.


Oui, c'est historical . Sans cela, il crée une classe à l'ancienne.

Si vous utilisez type() sur un objet de style ancien, vous obtenez simplement "instance". Sur un objet nouveau style, vous obtenez sa classe.


Histoire d' apprendre Python à la dure :

L'interprétation originale d'une classe par Python a été brisée de plusieurs manières sérieuses. Au moment où cette faute a été reconnue, il était déjà trop tard, et ils ont dû le soutenir. Afin de résoudre le problème, ils avaient besoin d'un style "nouvelle classe" pour que les "anciennes classes" continuent de fonctionner mais vous pouvez utiliser la nouvelle version plus correcte.

Ils ont décidé qu'ils utiliseraient un mot "objet", en minuscules, pour être la "classe" dont vous héritez pour faire une classe. C'est déroutant, mais une classe hérite de la classe nommée "object" pour faire une classe mais ce n'est pas un objet vraiment c'est une classe, mais n'oublie pas d'hériter de l'objet.

Aussi juste pour vous faire savoir quelle est la différence entre les classes de style nouveau et les classes de style ancien, c'est que les classes de nouveau style héritent toujours de object classe d' object ou d'une autre classe qui a hérité de l' object :

class NewStyle(object):
    pass

Un autre exemple est:

class AnotherExampleOfNewStyle(NewStyle):
    pass

Alors qu'une classe de base à l'ancienne ressemble à ceci:

class OldStyle():
    pass

Et une classe enfant à l'ancienne ressemble à ceci:

class OldStyleSubclass(OldStyle):
    pass

Vous pouvez voir qu'une classe de base Old Style n'hérite d'aucune autre classe, cependant, les classes Old Style peuvent, bien sûr, hériter les unes des autres. Hériter de l'objet garantit que certaines fonctionnalités sont disponibles dans chaque classe Python. Les nouvelles classes de style ont été introduites dans Python 2.2


La syntaxe de l'instruction de création de classe:

class <ClassName>(superclass):
    #code follows

En l'absence de toute autre super-classe dont vous voulez hériter, la superclass - superclass doit toujours être object , qui est la racine de toutes les classes en Python.

object est techniquement la racine des classes "new-style" en Python. Mais les cours de style nouveau d'aujourd'hui sont aussi bons que d'être le seul style de cours.

Mais, si vous n'utilisez pas explicitement le mot object lors de la création de classes, alors comme d'autres l'ont mentionné, Python 3.x hérite implicitement de la superclasse de l' object . Mais je suppose que explicite est toujours mieux que implicite (enfer)

Reference






inheritance