"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python 인터뷰 준비: 클래스 메서드와 정적 메서드 설명

Python 인터뷰 준비: 클래스 메서드와 정적 메서드 설명

2024-08-17에 게시됨
검색:451

Python Interview Preparation: Class Methods vs Static Methods Explained

Python에서 클래스 내의 메서드는 인스턴스 메서드, 클래스 메서드, 정적 메서드로 분류할 수 있습니다. 각각은 고유한 목적을 갖고 클래스와 해당 인스턴스에 대한 다양한 수준의 액세스를 제공합니다. 이 블로그에서는 클래스 메서드와 정적 메서드, 사용 방법, 접할 수 있는 일반적인 인터뷰 질문을 살펴보겠습니다.

인스턴스 메소드

클래스 메서드와 정적 메서드를 살펴보기 전에 인스턴스 메서드를 간략하게 요약해 보겠습니다.

  • 인스턴스 메소드: 이는 클래스에서 가장 일반적인 메소드이며 객체의 상태에 액세스하거나 수정하는 데 사용됩니다. 클래스의 인스턴스를 나타내는 첫 번째 매개변수로 self를 사용합니다.
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는 클래스나 인스턴스 데이터와 독립적으로 추가를 수행하는 정적 메서드입니다.

방법 비교

  • 인스턴스 메서드: 클래스의 인스턴스(자체)에서 작동합니다.

  • 클래스 메서드: 클래스 자체에 대해 작업합니다(cls).

  • 정적 메서드: 클래스 또는 인스턴스별 데이터에 대해 작동하지 않습니다.

수업 방법과 정적 방법에 대한 인터뷰 질문

질문 1: 클래스 메서드와 정적 메서드의 차이점을 설명하세요.

  • 클래스 메서드: cls를 첫 번째 매개변수로 사용하여 클래스 자체에서 작동합니다. 클래스 수준 데이터를 수정할 수 있습니다.

  • 정적 메서드: 클래스 및 인스턴스별 데이터와 독립적입니다. cls 또는 self를 첫 번째 매개변수로 사용하지 않습니다.

질문 2: 클래스 메소드와 정적 메소드를 사용하여 Book 클래스를 구현하십시오.

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는 연도가 유효한지 확인하는 정적 메서드입니다.

질문 3: 클래스 메서드를 대체 생성자로 사용하는 이유는 무엇입니까?

대체 생성자로서의 클래스 메서드는 다양한 종류의 입력 또는 시나리오에서 인스턴스를 생성하는 유연성을 제공하여 코드를 더 읽기 쉽게 만들고 객체 생성 논리를 위한 단일 위치를 유지합니다.

요약

  • 인스턴스 메서드: 클래스 인스턴스에서 작동하고 인스턴스별 데이터를 수정할 수 있습니다.

  • 클래스 메서드: cls를 첫 번째 매개변수로 사용하여 클래스 자체에 대해 작동하고 클래스 수준 데이터를 수정할 수 있습니다.

  • 정적 메서드: 클래스 또는 인스턴스별 데이터에 대해 작동하지 않으며 유틸리티 기능에 사용됩니다.

이러한 방법을 효과적으로 이해하고 활용하면 Python에서 보다 체계적이고 유연한 객체지향 코드를 작성할 수 있습니다.


릴리스 선언문 이 기사는 https://dev.to/tapstechie/python-interview-preparation-class-methods-vs-static-methods-explained-4phj?1에서 복제됩니다. 침해가 있는 경우, [email protected]에 문의하십시오. 그것을 삭제하려면
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3