Python 에서 클래스와 객체 정의하기

PythonPythonBeginner
지금 연습하기

소개

본 랩에서는 Python 의 객체 지향 프로그래밍 (OOP) 의 기본 개념을 학습합니다. 객체를 생성하기 위한 청사진 역할을 하는 클래스를 정의하는 방법과 클래스와 객체 간의 관계를 이해하는 방법을 탐구할 것입니다.

정의한 클래스의 인스턴스를 생성하고 사용함으로써 실질적인 경험을 얻게 될 것입니다. 이 랩에서는 __init__ 메서드를 사용하여 객체를 초기화하여 초기 상태를 설정하고, 더 나은 디버깅과 가독성을 위해 __repr__ 메서드를 사용하여 객체의 문자열 표현을 사용자 정의하는 과정을 안내합니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 94%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

클래스 정의 및 인스턴스 생성

이 단계에서는 기본 클래스를 정의하고 해당 클래스로부터 객체, 즉 인스턴스를 생성하는 방법을 배웁니다.

객체 지향 프로그래밍에서 **클래스 (class)**는 객체를 생성하기 위한 청사진입니다. 클래스는 생성될 객체가 가질 속성 (데이터) 과 메서드 (함수) 의 집합을 정의합니다. **객체 (object)**는 클래스의 인스턴스로, 클래스 청사진을 기반으로 구축된 구체적인 개체입니다.

간단한 Dog 클래스를 생성하는 것부터 시작하겠습니다.

먼저, WebIDE 왼쪽의 파일 탐색기에서 dog.py 파일을 엽니다. 이 파일은 현재 비어 있습니다.

이제 dog.py에 다음 코드를 추가하여 Dog 클래스를 정의하고, 인스턴스를 생성하고, 이를 사용해 보겠습니다.

## Define a simple Dog class
class Dog:
    ## Class attribute
    species = "Canis familiaris"

    ## Method
    def bark(self):
        print("Woof!")

## Create an instance (object) of the Dog class
my_dog = Dog()

## Access the class attribute using the instance
print(f"The species is: {my_dog.species}")

## Call the instance's method
print("The dog says:")
my_dog.bark()

코드를 분석해 보겠습니다.

  • class Dog:: 이 줄은 Dog라는 새 클래스를 정의합니다.
  • species = "Canis familiaris": 이것은 **클래스 속성 (class attribute)**입니다. 이 값은 Dog 클래스의 모든 인스턴스 간에 공유됩니다.
  • def bark(self):: 이것은 클래스 내의 함수인 **메서드 (method)**를 정의합니다. self 매개변수는 클래스의 현재 인스턴스에 대한 참조이며, 클래스에 속한 변수에 접근하는 데 사용됩니다.
  • my_dog = Dog(): 이 줄은 Dog 클래스의 새 인스턴스를 생성하고 이를 my_dog 변수에 할당합니다.
  • my_dog.species: 점 표기법 (dot notation) 을 사용하여 my_dog 객체의 species 속성에 접근합니다.
  • my_dog.bark(): my_dog 객체에서 bark 메서드를 호출합니다. Python 은 my_dog 객체를 self 인수로 메서드에 자동으로 전달합니다.

파일을 저장합니다. 스크립트를 실행하려면 WebIDE 에서 터미널을 열고 다음 명령을 실행하십시오.

python dog.py

객체가 올바르게 생성되었고 속성과 메서드에 성공적으로 접근했음을 확인하는 다음 출력을 볼 수 있습니다.

The species is: Canis familiaris
The dog says:
Woof!

__init__ 메서드를 사용한 객체 초기화

클래스 속성 (class attribute) 은 모든 인스턴스가 공유하지만, 종종 각 인스턴스가 고유한 데이터를 갖도록 하고 싶을 때가 있습니다. __init__ 메서드는 Python 클래스에서 생성자 (constructor) 역할을 하는 특별한 메서드입니다. 새 인스턴스를 생성할 때 자동으로 호출되어 고유한 속성을 초기화할 수 있게 해줍니다.

각 강아지에게 고유한 이름과 품종을 부여하도록 Dog 클래스를 수정해 보겠습니다.

dog.py 파일을 다시 열고 내용을 다음 코드로 교체하십시오.

## Define a Dog class with an __init__ method
class Dog:
    ## Class attribute
    species = "Canis familiaris"

    ## The __init__ method (constructor)
    def __init__(self, name, breed):
        ## Instance attributes
        self.name = name
        self.breed = breed

    ## Method
    def bark(self):
        print("Woof!")

## Create instances with unique attributes
dog1 = Dog("Buddy", "Golden Retriever")
dog2 = Dog("Lucy", "Labrador")

## Access the instance attributes
print(f"{dog1.name} is a {dog1.breed}.")
print(f"{dog2.name} is a {dog2.breed}.")

## The class attribute is still shared
print(f"Both are of the species: {dog1.species}")

변경된 내용은 다음과 같습니다.

  • def __init__(self, name, breed):: __init__ 메서드를 정의했습니다. 이 메서드는 self, name, breed를 인수로 받습니다.
  • self.name = nameself.breed = breed: 이 줄들은 **인스턴스 속성 (instance attributes)**을 생성합니다. 이 속성들은 각 Dog 객체마다 고유합니다. self 키워드는 이러한 속성을 생성 중인 특정 인스턴스에 연결합니다.
  • dog1 = Dog("Buddy", "Golden Retriever"): 인스턴스를 생성할 때 이제 namebreed에 대한 인수를 전달합니다. 이 인수들은 자동으로 __init__ 메서드로 전달됩니다.

파일을 저장하고 터미널에서 실행하십시오.

python dog.py

출력 결과를 보면 각 강아지 객체는 고유한 이름과 품종을 가지지만, 클래스 속성인 species는 여전히 공유하고 있음을 알 수 있습니다.

Buddy is a Golden Retriever.
Lucy is a Labrador.
Both are of the species: Canis familiaris

__repr__을 이용한 객체 표현 방식 사용자 정의

객체를 직접 출력하려고 할 때, Python 은 객체의 클래스와 메모리 주소를 포함하는 기본 표현 방식을 보여주는데, 이는 그다지 유용하지 않습니다. __repr__ 특별 메서드를 정의함으로써 더 설명적이고 개발자 친화적인 문자열 표현을 제공할 수 있습니다.

Dog 클래스에 __repr__ 메서드를 추가해 보겠습니다.

dog.py를 열고 내용을 최종 버전의 코드로 교체하십시오.

## Define a Dog class with __init__ and __repr__ methods
class Dog:
    ## Class attribute
    species = "Canis familiaris"

    ## The __init__ method (constructor)
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed

    ## The __repr__ method for a developer-friendly representation
    def __repr__(self):
        return f"Dog(name='{self.name}', breed='{self.breed}')"

    ## Method
    def bark(self):
        print("Woof!")

## Create an instance
my_dog = Dog("Buddy", "Golden Retriever")

## Print the object directly
print(my_dog)

주요 추가 사항은 다음과 같습니다.

  • def __repr__(self):: 이것은 표현 메서드를 정의합니다.
  • return f"Dog(name='{self.name}', breed='{self.breed}')": 이 메서드는 문자열을 반환해야 합니다. 좋은 관행은 객체를 동일한 상태로 다시 생성하는 데 사용될 수 있는 유효한 Python 표현식처럼 보이도록 문자열을 만드는 것입니다.

파일을 저장하고 스크립트를 마지막으로 한 번 더 실행하십시오.

python dog.py

메모리 주소 대신, 출력은 이제 __repr__ 메서드가 반환하는 명확하고 유익한 문자열이 됩니다. 이는 디버깅에 매우 유용합니다.

Dog(name='Buddy', breed='Golden Retriever')

요약

본 랩 (lab) 에서는 Python 의 객체 지향 프로그래밍 (Object-Oriented Programming, OOP) 의 기본 사항을 배웠습니다. 간단한 클래스를 정의하고 인스턴스를 생성하는 것부터 시작하여 클래스 속성 (class attribute) 과 메서드 (method) 를 사용하는 방법을 학습했습니다. 이어서 __init__ 메서드를 추가하여 각 객체를 고유한 인스턴스 속성으로 초기화함으로써 클래스를 개선했습니다. 마지막으로, __repr__ 메서드를 구현하여 객체의 문자열 표현 방식을 사용자 정의했으며, 이는 코드의 명확성과 디버깅 용이성을 크게 향상시킵니다. 이러한 개념들은 Python 에서 더 복잡하고 체계적인 애플리케이션을 구축하기 위한 기초가 됩니다.

Morty Proxy This is a proxified and sanitized view of the page, visit original site.