Maison > Article > développement back-end > Préparation à l'entretien Python : explication des méthodes de classe et des méthodes statiques
En Python, les méthodes d'une classe peuvent être classées en méthodes d'instance, méthodes de classe et méthodes statiques. Chacun répond à un objectif unique et fournit différents niveaux d'accès à la classe et à ses instances. Dans ce blog, nous explorerons les méthodes de classe et les méthodes statiques, comment les utiliser et les questions d'entretien courantes que vous pourriez rencontrer.
Avant de plonger dans les méthodes de classe et les méthodes statiques, récapitulons brièvement les méthodes d'instance :
class Car: def __init__(self, model, year): self.model = model self.year = year def display_info(self): print(f"Car Model: {self.model}, Year: {self.year}") # Usage my_car = Car("Toyota", 2020) my_car.display_info() # Output: Car Model: Toyota, Year: 2020
Les méthodes de classe sont des méthodes qui ont accès à la classe elle-même, pas seulement aux instances de la classe. Ils prennent cls comme premier paramètre, qui représente la classe. Ils sont définis à l'aide du décorateur @classmethod.
Pour créer des constructeurs alternatifs.
Pour accéder ou modifier les attributs au niveau de la classe.
class Person: def __init__(self, name, age): self.name = name self.age = age @classmethod def from_birth_year(cls, name, birth_year): current_year = 2024 age = current_year - birth_year return cls(name, age) # Usage person1 = Person("Alice", 30) # Using the primary constructor person2 = Person.from_birth_year("Bob", 1990) # Using the alternative constructor print(person1.name, person1.age) # Output: Alice 30 print(person2.name, person2.age) # Output: Bob 34
Dans cet exemple, from_birth_year est un constructeur alternatif qui calcule l'âge à partir de l'année de naissance et crée une instance Person.
class Employee: company_name = "TechCorp" def __init__(self, name): self.name = name @classmethod def change_company(cls, new_name): cls.company_name = new_name # Usage Employee.change_company("NewTechCorp") print(Employee.company_name) # Output: NewTechCorp
Dans cet exemple, change_company est une méthode de classe qui modifie l'attribut de classe company_name.
Les méthodes statiques n'accèdent ni ne modifient les données spécifiques à une classe ou à une instance. Ce sont des méthodes utilitaires qui appartiennent à la classe et sont définies à l'aide du décorateur @staticmethod.
Pour définir des fonctions utilitaires qui fonctionnent indépendamment des données de classe et d'instance.
Pour garder le code organisé dans l'espace de noms de la classe.
class MathUtils: @staticmethod def add(a, b): return a + b # Usage print(MathUtils.add(5, 7)) # Output: 12
Dans cet exemple, add est une méthode statique qui effectue une addition indépendamment de toute donnée de classe ou d'instance.
Méthodes d'instance : Opérez sur une instance de la classe (self).
Méthodes de classe : opèrent sur la classe elle-même (cls).
Méthodes statiques : ne pas opérer sur des données spécifiques à une classe ou à une instance.
Méthodes de classe : agissez sur la classe elle-même, en utilisant cls comme premier paramètre. Ils peuvent modifier les données au niveau de la classe.
Méthodes statiques : sont indépendantes des données spécifiques à la classe et à l'instance. Ils ne prennent pas cls ou self comme premier paramètre.
class Book: def __init__(self, title, author, publication_year): self.title = title self.author = author self.publication_year = publication_year @classmethod def from_string(cls, book_str): title, author, publication_year = book_str.split(', ') return cls(title, author, int(publication_year)) @staticmethod def is_valid_year(year): return year > 0 # Usage book1 = Book("Python Basics", "John Doe", 2020) book2 = Book.from_string("Advanced Python, Jane Smith, 2018") print(book1.title, book1.author, book1.publication_year) # Output: Python Basics John Doe 2020 print(book2.title, book2.author, book2.publication_year) # Output: Advanced Python Jane Smith 2018 print(Book.is_valid_year(2024)) # Output: True
Dans cet exemple, from_string est un constructeur alternatif (méthode de classe) qui crée un objet Book à partir d'une chaîne, et is_valid_year est une méthode statique qui vérifie si une année est valide.
Les méthodes de classe en tant que constructeurs alternatifs offrent une flexibilité dans la création d'instances à partir de différents types d'entrées ou de scénarios, rendant le code plus lisible et conservant un emplacement unique pour la logique de création d'objets.
Méthodes d'instance : fonctionnent sur des instances de classe et peuvent modifier des données spécifiques à l'instance.
Méthodes de classe : opèrent sur la classe elle-même, en utilisant cls comme premier paramètre, et peuvent modifier les données au niveau de la classe.
Méthodes statiques : n'opèrent pas sur des données spécifiques à une classe ou à une instance et sont utilisées pour des fonctions utilitaires.
En comprenant et en utilisant efficacement ces méthodes, vous pouvez écrire du code orienté objet plus organisé et plus flexible en Python.
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!