Skip to main content

Tout d'abord, tout dans Python est l'objet

Marche sur ma logique:

d'abord accepter un axiome - "Tout dans Python est tous des objets" , ne demandez pas pourquoi, Guido Van Rossum (Père de Pithon)
est le facteur de la langue Python
est également un objet


, classe est également un objet car il y a tous les objets en python. Seul cet objet a la capacité de créer un objet.

Donc, le problème, car la classe est également un objet, rien à distinguer entre elle et d'autres objets, nous pouvons le faire dessus:

peut affecter des variables vous pouvez copier Cela peut augmenter les propriétés peut être transmis à la




et parce que la classe également comme objet, elle peut donc être exécutée dans le programme. Transfert de motivation


def choose_class(name): if name == 'foo': class Foo: pass return Foo else: class Bar: pass return BarMyclass = choose_class('foo')print(Myclass)print(Myclass()) Voir un exemple simple. Tout d'abord, la fonction CLASS_CLASS () crée une couche, puis la couche est utilisée comme giAuna revient, puis nous obtenons cette valeur de retour via une variable myClass.



En regardant les deux impressions suivantes, la première impression était la classe que nous avons créée. La deuxième impression est l'objet que nous avons créé par la classe que nous avons créée.


Lundi, à l'aide de type Créer le type

<class '__main__.choose_class.<locals>.Foo'><__main__.choose_class.<locals>.Foo object at 0x0000017102113208>


En entrant une classe très spéciale, car le nom éteint est Minuscule ... il peut être utilisé pour créer une classe ...

「class type(object)」 「class type(name, bases, dict)」 With one argument, return the type of an object. The return value is a type object and generally the same object as returned by object.__class__. The isinstance() built-in function is recommended for testing the type of an object, because it takes subclasses into account.

Code ici et le code pour créer le même


Foo = type('Foo', (object,), {'bar':True})print(Foo)foo = Foo()print(foo)print(foo.bar)



class Foo(object): bar = True


Foo = type('Foo', (object,), {'bar': True})def get_bar(self): print(self.bar) FooChild = type('FooChild', (Foo,), {'get_bar': get_bar})print(hasattr(FooChild,'get_bar'))myfoo = FooChild()print(myfoo)myfoo.get_bar()


"Ajouter la méthode à la classe"



La couche simple est une utilisation de la classe pour créer des classes.
Comme nous l'utilisions ci-dessus, est une catégorie intégrée Python.

Exemple: , faire un miracle

1, __ METACLASS___ attribut (Python3 n'est plus supporté)

"Note !!!" Python3 ne prend plus en charge __metaclass__ attributs, mais utilisez les paramètres de métaclAss = xxxx Lorsque vous définissez la classe
Enregistrez une classe lorsque nous spécifions l'attribut __metaclass___, nous indiquons que nous spécifions cette classe de classe.

Par exemple, nous définissons une classe:

class MyClass(): pass
Lorsque déterminé, il n'est pas créé en mémoire, sachant que Python fera ces suivants:

Pour les propriétés __metaclass___ dans MyClass, le cas échéant, Python crée un nom d'objet appelé MyClass en mémoire (note, sa classe! Objet)

Si vous n'êtes pas trouvé dans myClass _ _metaclass__ attribut, puis continuez à trouver dans sa classe mère Si non inclus dans la classe mère, revenez à la couche inférieure pour trouver
si le module n'est pas encore, Python utilisera le type comme catégorie pour créer cette classe

2, élément personnalisé

Détermination de la classe d'éléments

. ] Utiliser la classe de classe pour déterminer la méta Voir la définition de la méthode __neW__ dans le document. Comprendre la méthode __New____, il est simple d'écrire , il existe également un moyen d'écrire passer par la méthode de la classe mère __New __ () pour retourner des objets de classe. Si la sous-classe doit réécrire la méthode __New __ (), la méthode __New __ () sera appelée dans la classe mère. De plus, nous pouvons également connaître ces opérations lorsqu'un objet est créé. Appelez la méthode __New __ () pour créer un espace mémoire appelant __init __ () méthode pour initialiser les paramètres

Sujets

Catégories