Python では、クラス内のメソッドは、インスタンス メソッド、クラス メソッド、静的メソッドに分類できます。それぞれが独自の目的を果たし、クラスとそのインスタンスへのさまざまなレベルのアクセスを提供します。このブログでは、クラス メソッドと静的メソッド、その使用方法、面接でよくある質問について説明します。
クラス メソッドと静的メソッドについて説明する前に、インスタンス メソッドについて簡単にまとめてみましょう。
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
クラスメソッドは、クラスのインスタンスだけでなく、クラス自体にアクセスできるメソッドです。これらは、クラスを表す cls を最初のパラメータとして受け取ります。これらは @classmethod デコレータを使用して定義されます。
代替コンストラクターを作成します。
クラスレベルの属性にアクセスまたは変更します。
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
この例では、from_birth_year は誕生年から年齢を計算し、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
この例では、change_company はクラス属性 company_name を変更するクラス メソッドです。
静的メソッドは、クラスまたはインスタンス固有のデータにアクセスしたり変更したりしません。これらはクラスに属するユーティリティ メソッドであり、@staticmethod デコレータを使用して定義されます。
クラスおよびインスタンス データから独立して動作するユーティリティ関数を定義します。
クラス名前空間内でコードを整理しておくため。
class MathUtils: @staticmethod def add(a, b): return a + b # Usage print(MathUtils.add(5, 7)) # Output: 12
この例では、add はクラスやインスタンスのデータとは独立して加算を実行する静的メソッドです。
インスタンス メソッド: クラス (self) のインスタンスを操作します。
クラス メソッド: クラス自体 (cls) を操作します。
静的メソッド: クラスまたはインスタンス固有のデータを操作しません。
クラス メソッド: cls を最初のパラメータとして使用して、クラス自体を操作します。クラスレベルのデータを変更できます。
静的メソッド: クラスおよびインスタンス固有のデータから独立しています。 cls または self を最初のパラメータとして取りません。
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
この例では、from_string は文字列から Book オブジェクトを作成する代替コンストラクター (クラス メソッド) であり、is_valid_year は年が有効かどうかを確認する静的メソッドです。
代替コンストラクターとしてのクラス メソッドは、さまざまな種類の入力またはシナリオからインスタンスを作成する際の柔軟性を提供し、コードを読みやすくし、オブジェクト作成ロジックの単一の場所を維持します。
インスタンス メソッド: クラス インスタンスを操作し、インスタンス固有のデータを変更できます。
クラス メソッド: 最初のパラメーターとして cls を使用してクラス自体を操作し、クラス レベルのデータを変更できます。
静的メソッド: クラスまたはインスタンス固有のデータは操作せず、ユーティリティ関数に使用されます。
これらの方法を理解して効果的に活用することで、より組織的で柔軟なオブジェクト指向コードを Python で作成できます。
以上がPython 面接の準備: クラス メソッドと静的メソッドの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。