recherche

Maison  >  Questions et réponses  >  le corps du texte

python中的subtype是什么?

T.__new__(S, ...) -> a new object with type S, a subtype of T

这里的subtype指的是什么?

class A(int):
    pass
    
class B(int):
    def __new__(cls):
        return A.__new__(int)
        
b = B()
isinstance(b, A)
#False
type(b)
#<class 'int'>
大家讲道理大家讲道理2893 Il y a quelques jours707

répondre à tous(1)je répondrai

  • 天蓬老师

    天蓬老师2017-04-17 17:52:46

    Répondez à la question

    subtype est littéralement 子类 Utilisez issubclass(cls1, cls2) pour déterminer si cls1 est une sous-classe de cls2.

    Bien que je ne sache pas quelle version de

    vous utilisez et quel document votre python intercepte, selon l'explication officielle, T.__new__(S, ...) crée simplement un objet instance de X.__init__(Y, ...) et n'a rien à faire avec Y . Le principe est que X a l'attribut X, qui peut être jugé par __new__. hasattr(X, '__new__')

    Exploration approfondie

    En fait, l'accent ici n'est pas
    , mais quel est l'attribut

    .subtype __new__En termes simples,

    contrôle la création d'objets, tandis que

    contrôle l'initialisation des objets (comme l'ajout de variables d'attribut supplémentaires) et __new__ contrôle la destruction d'objets, dans des circonstances normales, vous n'en avez besoin que. se soucier de __init__ .__del__ __init__Réfléchissez à une question : le processus d'instanciation d'objet standard, tel que

    , crée-t-il nécessairement un objet de

     ?n = N() NLa réponse est bien sûr non, le code est le suivant pour expliquer en détail la différence entre créer un objet et initialiser un objet.

    class N:
        def __init__(self, name):
            self.name = name
    class M:
        def __new__(cls, name):
            return N(name)
    m = M("enalix")
    isinstance(m, N)  #=> true
    isinstance(m, M)  #=> false
    m.name  #=> "enalix"

    Lorsque

    renvoie un objet, l'objet et les paramètres excédentaires seront transmis au

    de l'objet pour initialisation après la création.__new__ __init__

    À propos des fonctions

    Pour aller plus loin, quels sont les paramètres
    de

    ?__new__

    class P:
        def __new__(cls):
            return cls
    P()  #=> <class '__main__.P'>, 即类本身
    P.__new__(P)  #=> 同上
    clsCela implique une autre caractéristique essentielle de

    , c'est-à-dire que

    n'a pas de méthodes, seulement des fonctions. Lors de l'exécution de python, il exécute en fait python d'abord, puis P().p1 = P.__new__(P)

    class X:
        def hello(self):
            return self.name
    X.hello(m)  #=> "enalix"
    P.__init__(p1)Pour résumer,

    n'a rien à voir avec

    , tout comme T.__new__(S, ...) renvoie simplement l'attribut T de hello, qui est similaire à self et n'a rien à voir avec lui . name X

    Instructions supplémentaires

    1. Pour plus de description des
    fonctions uniquement, il est recommandé de lire mon article pour comprendre les classes en Ruby.

    python2, le code ci-dessus a été vérifié dans la version

    ,

    il y a de légères différencespython3

    répondre
    0
  • Annulerrépondre