En Python, les noms dont la première lettre est en majuscule font référence aux classes. Les crochets dans cette définition de classe sont vides car nous créons cette classe à partir d'un espace vide. Nous avons écrit une docstring décrivant les fonctionnalités de cette classe. Les fonctions d'une classe sont appelées méthodes .
Prenons l'exemple de la classe Student. En Python, la définition d'une classe se fait via le mot-clé class :
class Student(object): pass |
class Student(object):
def __init__(self, name, score): self.name = name self.score = score |
9.1.1 Créer une classe def __init__(self, name, score): self.name = nom self.score = score 1. La méthode __init__() est une méthode spéciale qui l'exécutera automatiquement lors de la création d'une nouvelle instance. Il y a deux traits de soulignement au début et à la fin. Il s'agit d'une convention pour éviter les conflits de noms entre les méthodes Python par défaut et les méthodes ordinaires. Dans la définition de cette méthode, le paramètre formel self est essentiel et doit être situé 4.self.name= name Les variables comme celle-ci, accessibles via les instances, sont appelées attributs fonctions qui encapsulent les données class Student(object): name = 'Student' Lors de l'écriture d'un programme, n'utilisez jamais le même nom pour les attributs d'instance et les attributs de classe, car les attributs d'instance portant le même nom bloqueront les attributs de classe, mais lorsque vous supprimez les attributs d'instance, utilisez à nouveau le même nom pour accéder à ce qui arrive. seront des attributs de classe. Vous pouvez modifier la valeur de l'attribut de trois manières différentes : 1. Modifier directement via l'instance class Student(object): def __init__(self, name, score): self.__name = name self.__score = score def print_score(self): print('%s: %s' % (self.__name, self.__score)) def __init__(soi, nom, score): >>> bart = Student('Bart Simpson', 98) >>> bart.__name Traceback (most recent call last): File " AttributeError: 'Student' object has no attribute '__name' class Student(object): ... def get_name(self): return self.__name def get_score(self): return self.__score class Student(object): ... def set_score(self, score): self.__score = score class Student(object): ... def set_score(self, score): if 0 <= score <= 100: self.__score = score else: raise ValueError('bad score') 7. Il convient de noter qu'en Python, les noms de variables sont similaires à __xxx__, c'est-à-dire qu'ils commencent par un double trait de soulignement et se terminent par un double trait de soulignement, ce sont des variables spéciales accessibles directement et ne sont pas privées. . variables, donc les noms de variables tels que __name__ et __score__ ne peuvent pas être utilisés. Parfois, vous verrez des noms de variables d'instance commençant par un trait de soulignement, tel que _name. Cependant, selon la convention, lorsque vous voyez une telle variable, cela signifie "Bien que je puisse le faire". être accessible, veuillez me traiter comme une variable privée et ne pas y accéder à volonté." 8. Les variables d'instance commençant par des doubles traits de soulignement ne sont pas nécessairement accessibles de l'extérieur. La raison pour laquelle __name n'est pas accessible directement est que l'interpréteur Python modifie en externe la variable __name en _Student__name, de sorte que la variable __name est toujours accessible via _Student__name. 1. Si une classe est similaire à une version spéciale d'une autre classe, vous pouvez utiliser l'héritage. Si une classe hérite d'une autre classe, elle obtiendra automatiquement toutes les propriétés et méthodes. de l'autre classe. La classe d'origine est la classe parent et la nouvelle classe est la classe enfant. 2. La sous-classe hérite de tous les attributs et méthodes de la classe parent, et peut également définir ses propres attributs et méthodes. En programmation POO, lorsque nous définissons une classe, elle peut hériter d'une classe existante. La nouvelle classe est appelée une sous-classe (Sous-classe) et la classe héritée est appelée une classe de base, une classe parent ou une super classe (Classe de base, Super. classe). class Dog(Animal): #继承Animal passclasse Étudiant(objet): point
Nous avons écrit le code suivant pour accéder à la valeur du nom d'attribut de my_dog. my_dog.name La notation point est très couramment utilisée en Python. Cette syntaxe montre comment Python apprend la valeur d'un attribut. 2. Après avoir créé une instance basée sur la classe Dog, vous pouvez utiliser la notation point pour appeler n'importe quelle méthode définie dans la classe Dog. 3. Vous pouvez créer n'importe quel nombre d'instances en fonction de la classe selon vos besoins. 9.2 Utilisation de classes et d'instances
1. Une tâche importante que vous devez effectuer est de modifier les propriétés de l'instance. Vous pouvez modifier les propriétés d'une instance directement ou écrire des méthodes pour les modifier d'une manière spécifique. 2. Une classe est un modèle pour créer des instances, et les instances sont des objets spécifiques. Les données appartenant à chaque instance sont indépendantes les unes des autres et ne s'affectent pas. La méthode est la fonction liée à l'instance. , et la fonction ordinaire Différemment, les méthodes peuvent accéder directement aux données de l'instance ; en appelant la méthode sur l'instance, nous exploitons directement les données à l'intérieur de l'objet, mais il n'est pas nécessaire de connaître les détails d'implémentation à l'intérieur de la méthode. Contrairement aux langages statiques, Python permet de lier n'importe quelle donnée à des variables d'instance, c'est-à-dire que pour deux variables d'instance, bien qu'il s'agisse d'instances différentes de la même classe, elles peuvent avoir des noms de variable différents. 9.2.1 Définir la valeur initiale de la classe Chaque attribut de la classe doit avoir une valeur initiale, même si la valeur est 0 ou une chaîne vide. Dans certains cas, comme lors de la définition d'une valeur par défaut, il est possible de spécifier une telle valeur initiale dans la méthode __init__() ; si vous faites cela pour un attribut, vous n'avez pas besoin d'inclure des paramètres formels qui lui fournissent une initiale ; valeur. Définissez les attributs directement dans la classe, qui sont des attributs de classe :
classe Étudiant(objet) : nom = 'Étudiant' 9.2.2 Modifier la valeur de l'attribut
<🎜> 3. Après la modification, il n'y a aucun changement dans le code externe, mais la variable d'instance .__name et la variable d'instance .__score ne sont plus accessibles de l'extérieur : <🎜>
classe Étudiant (objet) :
self.__name = nom self.__score = score
def print_score(self): print('%s: %s' % (self.__name, self.__score))
4. Cela garantit que le code externe ne peut pas modifier l'état interne de l'objet à volonté, de sorte que via la protection des restrictions d'accès, le code Plus robuste. Mais si un code externe souhaite obtenir le nom et le score, vous pouvez ajouter des méthodes comme get_name et get_score à la classe Student : <🎜>>>> bart = Étudiant('Bart Simpson', 98)>>> bart.__name Traceback (dernier appel le plus récent) : Fichier "
5 . Si Pour permettre au code externe de modifier la partition, vous pouvez ajouter la méthode set_score à la classe Student : class Student(object): ... def get_name(self): return self.__name def get_score(self): return self.__score
6. Par rapport aux paramètres d'appel direct d'origine, dans la méthode, les paramètres peuvent être vérifiés pour éviter de transmettre des paramètres non valides : class Étudiant(objet): ... def set_score(self, score): self.__score = score classe Étudiant(objet) : .. . def set_score(self, score): if 0 <= score <= 100 :<🎜><🎜> self.__score = score<🎜><🎜> else :<🎜> <🎜> augmenter ValueError('mauvais score')<🎜> 9.3 Héritage
classe Chien(Animal) : #Hériter un animal
pass
3. Lors de la définition d'une sous-classe, le nom de la classe parent doit être précisé entre parenthèses.
4.class Student(object): __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称 |
<🎜>classe Étudiant (objet) :<🎜><🎜> __slots__ = ('name', 'age') # Utilisez un tuple pour définir les noms d'attributs qui peuvent être liés <🎜> |
Lorsque vous utilisez __slots__, veuillez noter que les attributs définis par __slots__ n'affectent que l'instance de classe actuelle et n'ont aucun effet sur les sous-classes héritées.
1. Grâce à l'héritage multiple, une sous-classe peut obtenir toutes les fonctions de plusieurs classes parents en même temps.
2. Lors de la conception de la relation d'héritage des classes, la ligne principale est généralement héritée d'une seule source. Par exemple, Ostrich hérite de Bird. Cependant, si vous avez besoin de « mélanger » des fonctionnalités supplémentaires, vous pouvez y parvenir grâce à un héritage multiple. Par exemple, laissez Ostrich hériter de Runnable en plus d'hériter de Bird. Cette conception est souvent appelée MixIn. Le but de MixIn est d'ajouter plusieurs fonctions à une classe. De cette façon, lors de la conception d'une classe, nous donnons la priorité à la combinaison de plusieurs fonctions MixIn via un héritage multiple au lieu de concevoir des relations d'héritage complexes à plusieurs niveaux.
3. De cette façon, nous n'avons pas besoin d'une chaîne d'héritage compliquée et énorme. Tant que nous choisissons de combiner les fonctions de différentes classes, nous pouvons rapidement construire les sous-classes requises. Puisque Python autorise l’héritage multiple, MixIn est une conception courante. Les langages qui n'autorisent qu'un héritage unique (comme Java) ne peuvent pas utiliser la conception de MixIn.
1. Il existe de nombreuses fonctions spéciales dans les classes Python qui peuvent nous aider à personnaliser les classes.
Après avoir défini la méthode __str__(), vous pouvez renvoyer une jolie chaîne :
... self.name = nom
... def __str__(self): ... return 'Objet étudiant (nom : %s)' % self.name
|
class Fib(object): def __init__(self): self.a, self.b = 0, 1 # 初始化两个计数器a,b
def __iter__(self): return self # 实例本身就是迭代对象,故返回自己
def __next__(self): self.a, self.b = self.b, self.a + self.b # 计算下一个值 if self.a > 100000: # 退出循环的条件 raise StopIteration() return self.a # 返回下一个值 |
Tapez les variables directement sans les imprimer. L'exemple imprimé n'a toujours pas l'air bien :
|
class Student(object): def __init__(self, name): self.name = name def __str__(self): return 'Objet étudiant (name=%s)' % self.name __repr__ = __str__ |
>>> pour n dans Fib() :... imprimer (n)...1 1235 ...4636875025 |
Bien que l'instance Fib puisse être utilisée dans des boucles for et ressemble un peu à une liste, il n'est toujours pas possible de l'utiliser comme liste. Par exemple, prenez le 5ème élément :
>>> >
TypeError : l'objet 'Fib' ne prend pas en charge l'indexation |
Pour se comporter comme une liste et supprimer des éléments en fonction des indices, vous devez implémenter la méthode __getitem__() :
def __getitem__(self, n ):
a, b = 1, 1
a, b = b, a + b
from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) |
from enum import EnumMois = Enum('Month', ('Jan', 'Feb', 'Mar', 'Avr', 'May', 'Jun', 'Jul', 'Août', ' Sep', 'Oct', 'Nov', 'Dec')) |
Pour créer un objet classe, la fonction type() passe 3 paramètres en séquence :
Le nom de la classe ;
Une collection de classes parents héritées. Notez que Python prend en charge l'héritage multiple. S'il n'y a qu'une seule classe parent, n'oubliez pas l'élément unique. méthode d'écriture du tuple ;
Le nom de la méthode de la classe est lié à la fonction. Ici, nous lions la fonction fn au nom de la méthode bonjour.
Métaclasse, traduit littéralement par métaclasse, l'explication simple est : après avoir défini une classe, nous pouvons créer une instance basée sur cette classe, donc : d'abord Définissez la classe, puis créez des instances. Mais que se passe-t-il si nous voulons créer une classe ? Ensuite, vous devez créer une classe basée sur la métaclasse, donc : définissez d'abord la métaclasse, puis créez la classe. La connexion est la suivante : définissez d’abord la métaclasse, puis vous pouvez créer la classe et enfin créer l’instance. Les paramètres reçus par la méthode
__new__() sont :
L'objet de la classe en cours de création ;
class Le nom ; la collection de classes parent héritées par la classe
; la collection de méthodes de la classe
.
Lorsque vous utilisez du code pour simuler des objets réels, vous trouverez des propriétés et des méthodes à mesure que vous ajoutez de plus en plus de fonctionnalités et de détails. Et les fichiers de code deviennent de plus en plus longs, une partie d'entre eux peut être séparée et réorganisée en classe. Une grande catégorie peut être divisée en plusieurs sous-catégories.
Pour simuler des objets physiques plus complexes, vous devez les considérer à partir d'un niveau logique supérieur. Afin d'écrire du code plus efficace, concis et précis, vous devrez peut-être constamment réorganiser les cours.
1. Au fur et à mesure que des classes continuent d'être ajoutées, même un excellent héritage rendra le code très long, donc python vous permet d'importer des classes dans des modules. Et importez les modules requis pour les utiliser dans le programme principal.
2. Rédigez une chaîne de documentation pour chaque module, expliquez la fonction du module et décrivez brièvement le contenu.
3. Importez plusieurs classes d'un module, séparez-les par des virgules et créez des instances selon vos besoins.
4. Vous pouvez également importer la classe entière, ajouter le nom de la classe avant l'instance et accéder à la classe requise.
5. Importez un module dans un autre module.
La bibliothèque standard Python est un ensemble de modules qui peuvent être importés et utilisés uniquement avec l'instruction import.
Les dictionnaires vous permettent d'associer des informations, mais n'enregistrent pas l'ordre dans lequel vous ajoutez des paires clé-valeur. Pour créer un dictionnaire et enregistrer l'ordre dans lequel vous ajoutez des paires clé-valeur, vous pouvez utiliser le orderDict. classe dans le module collections. Les instances de OrderedDict sont identiques aux dictionnaires, mais enregistrent l'ordre dans lequel les paires clé-valeur sont ajoutées.
OrderdDict est très bien, il possède à la fois les caractéristiques d'une liste et d'un dictionnaire, ce qui est parfois nécessaire.
Contient des fonctions permettant de générer des nombres aléatoires de différentes manières. Où randint() renvoie un entier dans la plage spécifiée.
Le module datetime contient également une classe datetime La classe datetime est importée via from datetime import datetime. Si vous importez uniquement import datetime, vous devez citer le nom complet datetime.datetime.
datetime.now() renvoie la date et l'heure actuelles, son type est datetime.
Il existe également des pilotes MySQL : mysql-connector-python, la bibliothèque NumPy pour le calcul scientifique : numpy, l'outil de modèle Jinja2 pour générer du texte, etc.
1.urlparse module, le module urlpasrse fournit quelques fonctions de base pour le traitement des chaînes d'URL. Ces fonctions incluent urlparse(), urlunparse() et urljoin().
2.urlparse() analyse urlstr en un 6-tuple (prot_sch, net_loc, path, params, query, frag). Chaque composant ici a été décrit précédemment.
3. La fonction de urlunparse() est complètement opposée à urlpase(). Elle génère un urltup 6-tuple (prot_sch, net_loc, path, params, query, frag) à partir de l'URL traitée par urlparse(), et le fusionne dans une URL et renvoie.
4. Le module urllib fournit de nombreuses fonctions qui peuvent être utilisées pour télécharger des données à partir d'une URL spécifiée. Il peut également encoder et décoder des chaînes afin qu'elles puissent être affichées sous la forme correcte dans l'URL. Les fonctions à présenter ci-dessous incluent urlopen(), urlretrieve(), quote(), unquote(), quote_plus(), unquote_plus() et urlencode().
5.urlopen() ouvre une connexion Web représentée par une chaîne URL donnée et renvoie un objet de type fichier.
6. urlretrieve() ne sert pas à accéder et à ouvrir l'URL sous forme de fichier, mais à télécharger le HTML complet et à l'enregistrer sous forme de fichier.
Être familier avec le style de codage lié aux classes, surtout lorsque le programme est complexe.
1. Le nom de la classe doit utiliser la méthode de dénomination en casse chameau , c'est-à-dire que la première lettre de la classe est en majuscule, sans traits de soulignement, tandis que la première lettre du nom de l'instance et du module le nom est en minuscules et les traits de soulignement sont utilisés pour relier les mots.
2. Ajoutez une description de chaîne de documentation après chaque définition de classe pour décrire brièvement la fonction de la classe, et ajoutez une description de chaîne de documentation sous chaque module pour décrire ce que les classes sous le module peuvent faire.
3. Utilisez des lignes vides pour organiser le code, mais n'en abusez pas. Vous pouvez utiliser une ligne vide pour séparer les méthodes dans une classe et utiliser deux lignes vides pour séparer les classes.
4. Lorsque vous devez importer des modules dans la bibliothèque standard et des modules écrits par vous-même en même temps, écrivez d'abord l'instruction d'importation pour importer le module de bibliothèque standard, séparé par une ligne vide, puis importez le déclaration d'importation de module que vous avez écrite. Lorsque plusieurs instructions d'importation sont incluses, il est plus facile de comprendre l'origine de chaque module du programme.
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!