Maison  >  Article  >  développement back-end  >  Explication détaillée de la différence entre les classes python de nouveau style et les classes de style ancien

Explication détaillée de la différence entre les classes python de nouveau style et les classes de style ancien

高洛峰
高洛峰original
2017-03-16 17:20:471972parcourir

Les classes de nouveau style de Python ont été introduites dans la version 2.2. Nous pouvons appeler les classes précédentes des classes classiques ou des classes à l'ancienne.

Pourquoi une nouvelle classe de style est-elle introduite dans la version 2.2 ? L'explication officielle est :

Pour unifier les classes et les types.

Avant la version 2.2, par exemple, dans la version 2.1, les classes et les types étaient différents. Si a est une instance de ClassA, alors a.__class__ renvoie 'class __main__.ClassA' et type(a) renvoie toujours 30b02ed9f5ad266201eb54d2df730d82. Après avoir introduit une nouvelle classe, par exemple, ClassB est une nouvelle classe, b est une instance de ClassB, b.__class__ et type(b) renvoient tous deux la « classe '__main__.ClassB' », elle est donc unifiée.

Après l'introduction de nouvelles classes, il y a d'autres avantages, tels que davantage de propriétés intégrées seront introduites, des descripteurs pourront être introduits, des propriétés pourront être calculées, etc.

Pour des raisons de compatibilité ascendante, les classes définies par l'utilisateur sont des classes classiques par défaut. Les nouvelles classes doivent hériter de l'objet de classe de base de toutes les classes ou d'une nouvelle classe qui hérite de l'objet.

Il convient de noter que même si la dernière version de Python (2.7) est utilisée, certaines fonctionnalités ne fonctionneront pas sur les classes à l'ancienne.

Ainsi, afin de vous assurer que vous utilisez des classes de nouveau style, il existe deux méthodes :

1. Métaclasse, ajoutez le code suivant au début du code du module de classe __metaclass__ =. nom de classe (depuis qu'une nouvelle classe est définie).

2. Les classes héritent directement ou indirectement de l'objet classe intégré.

Si vous n'avez pas besoin d'être compatible avec les classes de style ancien ou les anciennes versions de classes, conservez-les toutes avec des classes de nouveau style.

En Python3, ces problèmes n'existent pas, car toutes les classes sont des sous-classes de la classe objet (implicitement).

Exemple de code :

class oldClass:            #经典类
    def __init__( self ):
        pass
 
class newClass(object):    #新类
    def __init__( self ):
        pass 
 
c1 = oldClass()
c2 = newClass()
 
c1.__class__            # 输出-> <class __main__.oldClass at 0x0137BF10>
type(c1)                # 输出-> <type &#39;instance&#39;>
 
c2.__class__            # 输出-><class &#39;__main__.newClass&#39;>
type(c2)                # 输出-><class &#39;__main__.newClass&#39;>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn