Python >> Tutoriel Python >  >> Python

Classe Python à une ligne

Détestez-vous ces longues définitions de classe avec __init__ et trop d'espaces et de retours à la ligne ? Python One-Liners à la rescousse ! Heureusement, vous pouvez créer des classes en une seule ligne - et cela peut même être Pythonic pour le faire ! Cela semble trop beau pour être vrai ? Plongeons-y !

Problème :Comment créer une classe Python en une seule ligne de code ?

Exemple :Supposons que vous souhaitiez créer une classe Car avec deux attributs speed et color . Voici la longue définition :

class Car:

    def __init__(self, speed, color):
        self.speed = speed
        self.color = color


porsche = Car(200, 'red')
tesla = Car(220, 'silver')

print(porsche.color)
# red

print(tesla.color)
# silver

Comment faites-vous cela en une seule ligne de code ?

Voyons d'abord un aperçu dans notre shell Python interactif :

Exercice :Créer un troisième attribut seats et initialisez-le pour la Tesla et la Porsche !

Méthode 1 :type()

Le type(name, bases, dict) La fonction crée et renvoie un nouvel objet. Il prend trois arguments qui permettent de personnaliser l'objet :

  • name :il s'agit du nom de classe du nouvel objet. Il devient le name attribut, afin que vous puissiez utiliser object.name pour accéder à la valeur de l'argument.
  • bases :il s'agit d'un tuple d'une ou plusieurs valeurs de tuple qui définit les classes de base. Vous pouvez accéder au contenu via le object.bases attribut de l'objet nouvellement créé.
  • dict :il s'agit de l'espace de noms avec les attributs de classe et les définitions de méthodes. Vous pouvez créer des attributs et des méthodes personnalisés ici. Au cas où vous voudriez accéder aux valeurs plus tard, vous pouvez utiliser le object.__dict__ attribut sur l'objet nouvellement créé.

Voici comment vous pouvez utiliser le type() fonction pour créer un nouveau Car objet porsche :

# Method 1: type()

# One-Liner
porsche = type('Car', (object,), {'speed': 200, 'color': 'red'})

# Result
print(porsche.color)
# red

Si vous avez besoin d'en savoir plus sur le type() fonction, consultez notre article connexe.

Article connexe :Comment créer des objets en ligne avec des propriétés ? [Python One-Liner]

Le type() La fonction est peu connue mais très efficace lorsqu'il s'agit de créer des objets de différents types. Le seul inconvénient est que vous ne pouvez pas le réutiliser, par exemple pour créer un autre objet. Vous auriez besoin d'utiliser la même liste d'arguments pour créer un deuxième objet du même type, ce qui peut être un peu fastidieux dans certains cas.

Méthode 2 :Objet Lambda + Attributs dynamiques

Le lambda mot-clé est généralement utilisé pour créer une fonction nouvelle et anonyme. Cependant, en Python, tout est un objet, même les fonctions. Ainsi, vous pouvez créer une fonction avec la valeur de retour None et l'utiliser comme Car objet.

Ensuite, vous ajoutez deux attributs dynamiques speed et color à l'objet nouvellement créé. Vous pouvez tout linéariser en utilisant la syntaxe du point-virgule pour entasser plusieurs lignes de code en une seule ligne. Voici à quoi ressemble le résultat :

# Method 2: lambda + dynamic attributes

# One-Liner
tesla = lambda: None; tesla.speed = 200; tesla.color = 'silver'

# Result
print(tesla.color)
# silver

Cette méthode est un peu contre nature - et je la considérerais comme la moins pythonique parmi celles discutées dans cet article. Cependant, le suivant est assez Pythonique !

Méthode 3 :tuples nommés

Il existe également un type de données intéressant dans le module de collections :les tuples nommés.

from collections import namedtuple

# One-Liner
tesla = namedtuple('Car', ['speed', 'color'])(200, 'silver')

# Result
print(tesla.speed, tesla.color)
# 200 silver

La définition de l'objet namedtuple se compose de deux parties :

  • La première partie de l'expression namedtuple('Car', ['speed', 'color']) crée un nouvel objet avec deux attributs donnés dans la liste.
  • La deuxième partie de l'expression associe la chaîne 'value' à l'attribut tuple 'property' .

Cette dernière méthode est efficace, propre et concise, et elle résout le problème de créer une classe Python en une seule ligne de code, car vous pouvez réutiliser votre "classe" namedtuple pour créer plusieurs instances si vous le souhaitez !

Livre Python One-Liners :maîtrisez d'abord la ligne unique !

Les programmeurs Python amélioreront leurs compétences en informatique avec ces lignes utiles.

Python One-Liners vous apprendra à lire et à écrire des « lignes simples » :des déclarations concises de fonctionnalités utiles regroupées dans une seule ligne de code. Vous apprendrez à décompresser et à comprendre systématiquement n'importe quelle ligne de code Python, et à écrire du Python éloquent et puissamment compressé comme un expert.

Les cinq chapitres du livre couvrent (1) les trucs et astuces, (2) les expressions régulières, (3) l'apprentissage automatique, (4) les principaux sujets de science des données et (5) les algorithmes utiles.

Des explications détaillées des one-liners introduisent les concepts clés de l'informatique etdéveloppez vos compétences en matière de codage et d'analyse . Vous découvrirez les fonctionnalités Python avancées telles que la compréhension de liste , tranchage , fonctions lambda , expressions régulières , carte et réduire fonctions et affectations de tranches .

Vous apprendrez également à :

  • Exploiter les structures de données pour résoudre des problèmes réels , comme utiliser l'indexation booléenne pour trouver des villes avec une pollution supérieure à la moyenne
  • Utiliser les bases de NumPy comme tableau , forme , axe , tapez , diffusion , indexation avancée , tranchage , tri , recherche , agrégation , et statistiques
  • Calculer des statistiques de base de tableaux de données multidimensionnels et les algorithmes K-Means pour l'apprentissage non supervisé
  • Créer davantage d'expressions régulières avancées en utilisant le regroupement et groupes nommés , anticipations négatives , caractères échappés , espaces blancs, jeux de caractères (et jeux de caractères négatifs ) et opérateurs gourmands/non gourmands
  • Comprendre un large éventail de sujets informatiques , y compris les anagrammes , palindromes , surensembles , permutations , factorielles , nombres premiers , Fibonacci chiffres, obscurcissement , recherche , et tri algorithmique

À la fin du livre, vous saurez comment écrire Python dans sa forme la plus raffinée , et créez de belles pièces concises d'"art Python" en une seule ligne.

Obtenez vos Python One-Liners sur Amazon !!


Post précédent