웹사이트 검색

Python 3에서 클래스를 생성하고 객체를 정의하는 방법


소개

Python은 객체 지향 프로그래밍 언어입니다. 객체 지향 프로그래밍(OOP)은 명시적인 순서 지정 명령에 중점을 둔 절차적 프로그래밍과 달리 재사용 가능한 코드 패턴 생성에 중점을 둡니다. 특히 복잡한 프로그램에서 작업할 때 객체 지향 프로그래밍을 사용하면 코드를 재사용하고 더 읽기 쉬운 코드를 작성할 수 있으므로 유지 관리가 더 쉬워집니다.

개체 지향 프로그래밍에서 가장 중요한 개념 중 하나는 다음과 같이 정의되는 클래스와 개체 간의 구분입니다.

  • 클래스 — 객체에 대해 프로그래머가 만든 청사진입니다. 이것은 이 클래스에서 인스턴스화된 모든 객체를 특징짓는 속성 집합을 정의합니다.
  • 객체 — 클래스의 인스턴스입니다. 이것은 클래스가 프로그램에서 명시되는 실현된 버전의 클래스입니다.

이들은 패턴을 생성(클래스의 경우)한 다음 패턴을 사용(객체의 경우)하는 데 사용됩니다.

이 자습서에서는 클래스 생성, 객체 인스턴스화, 생성자 메서드로 속성 초기화, 동일한 클래스의 둘 이상의 객체 작업을 진행합니다.

전제 조건

컴퓨터나 서버에 Python 3가 설치되어 있고 프로그래밍 환경이 설정되어 있어야 합니다. 프로그래밍 환경이 설정되지 않은 경우 운영 체제(Ubuntu, CentOS, Debian 등)에 적합한 서버의 프로그래밍 환경에 대한 설치 및 설정 가이드를 참조할 수 있습니다.

클래스

클래스는 개체를 만드는 데 사용하도록 정의할 수 있는 청사진 또는 프로토타입과 같습니다.

def 키워드를 사용하여 함수를 정의하는 방법과 유사하게 class 키워드를 사용하여 클래스를 정의합니다.

정보: 이 자습서의 예제 코드를 따라하려면 python3 명령을 실행하여 로컬 시스템에서 Python 대화형 셸을 엽니다. 그런 다음 >>> 프롬프트 뒤에 추가하여 예제를 복사, 붙여넣기 또는 편집할 수 있습니다.

두 가지 기능이 연결된 Shark라는 클래스를 정의해 보겠습니다.

class Shark:
    def swim(self):
        print("The shark is swimming.")

    def be_awesome(self):
        print("The shark is being awesome.")

이러한 함수는 Shark 클래스 아래에 들여쓰기되어 있으므로 메서드라고 합니다. 메서드는 클래스 내에서 정의되는 특별한 종류의 함수입니다.

이러한 함수에 대한 인수는 이 클래스를 기반으로 만들어진 개체에 대한 참조인 self라는 단어입니다. 클래스의 인스턴스(또는 개체)를 참조하려면 self가 항상 첫 번째 매개변수이지만 유일한 매개변수일 필요는 없습니다.

이 클래스를 정의하면 Shark 객체가 생성되지 않고 나중에 정의할 수 있는 Shark 객체의 패턴만 생성됩니다. 즉, 이 단계에서 위의 프로그램을 실행하면 아무 것도 반환되지 않습니다.

위의 Shark 클래스를 생성하면 개체에 대한 청사진이 제공됩니다.

사물

개체는 클래스의 인스턴스입니다. 위에서 정의한 Shark 클래스를 사용하여 개체 또는 인스턴스를 만들 수 있습니다.

sammy라는 Shark 객체를 만들겠습니다.

sammy = Shark()

여기서 sammy 개체를 Shark()와 동일하게 설정하여 클래스의 인스턴스로 초기화했습니다.

이제 Shark 개체 sammy와 함께 두 가지 방법을 사용하겠습니다.

sammy = Shark()
sammy.swim()
sammy.be_awesome()

Shark 개체 sammyswim()be_awesome() 두 메서드를 사용합니다. 객체의 속성을 참조하는 데 사용되는 도트 연산자(.)를 사용하여 이를 호출했습니다. 이 경우 속성은 메소드이며 함수로 호출하는 것과 같이 괄호로 호출됩니다.

키워드 selfShark 클래스에 정의된 메서드의 매개변수였기 때문에 sammy 개체가 메서드에 전달됩니다. self 매개변수는 메소드가 객체 속성을 참조하는 방법을 갖도록 합니다.

그러나 메소드를 호출할 때 괄호 안에는 아무 것도 전달되지 않고 sammy 개체가 도트 연산자와 함께 자동으로 전달됩니다.

프로그램 컨텍스트 내에 개체를 추가해 보겠습니다.

class Shark:
    def swim(self):
        print("The shark is swimming.")

    def be_awesome(self):
        print("The shark is being awesome.")


def main():
    sammy = Shark()
    sammy.swim()
    sammy.be_awesome()

if __name__ == "__main__":
    main()

프로그램을 실행하여 무엇을 하는지 살펴보겠습니다.

  1. python shark.py
Output
The shark is swimming. The shark is being awesome.

sammy 개체는 프로그램의 main() 함수에 있는 두 메서드를 호출하여 해당 메서드를 실행합니다.

생성자 방법

생성자 메서드는 데이터를 초기화하는 데 사용됩니다. 클래스의 개체가 인스턴스화되자마자 실행됩니다. __init__ 메서드라고도 하는 이 메서드는 클래스의 첫 번째 정의이며 다음과 같습니다.

class Shark:
    def __init__(self):
        print("This is the constructor method.")

위의 프로그램에서 Shark 클래스에 위의 __init__ 메서드를 추가한 경우 프로그램은 sammy 내에서 아무 것도 수정하지 않고 다음을 출력합니다. 인스턴스화:

Output
This is the constructor method. The shark is swimming. The shark is being awesome.

생성자 메서드가 자동으로 초기화되기 때문입니다. 클래스 객체로 수행하려는 초기화를 수행하려면 이 메서드를 사용해야 합니다.

위의 생성자 메서드를 사용하는 대신 개체에 이름을 할당하는 데 사용할 수 있는 name 변수를 사용하는 메서드를 만들어 보겠습니다. name을 매개변수로 전달하고 self.namename과 동일하게 설정합니다.

class Shark:
    def __init__(self, name):
        self.name = name

다음으로 다음과 같이 이름을 참조하도록 함수의 문자열을 수정할 수 있습니다.

class Shark:
    def __init__(self, name):
        self.name = name

    def swim(self):
        # Reference the name
        print(self.name + " is swimming.")

    def be_awesome(self):
        # Reference the name
        print(self.name + " is being awesome.")

마지막으로 Shark 객체 sammy의 이름을 의 매개변수로 전달하여 \Sammy\와 동일하게 설정할 수 있습니다. 상어 클래스:

class Shark:
    def __init__(self, name):
        self.name = name

    def swim(self):
        print(self.name + " is swimming.")

    def be_awesome(self):
        print(self.name + " is being awesome.")


def main():
    # Set name of Shark object
    sammy = Shark("Sammy")
    sammy.swim()
    sammy.be_awesome()

if __name__ == "__main__":
    main()

이제 프로그램을 실행할 수 있습니다.

  1. python shark.py
Output
Sammy is swimming. Sammy is being awesome.

개체에 전달한 이름이 출력되는 것을 볼 수 있습니다. self 키워드와 함께 매개 변수 이름으로 __init__ 메서드를 정의하고 메서드 내에서 변수를 정의했습니다.

생성자 메서드는 자동으로 초기화되기 때문에 명시적으로 호출할 필요 없이 클래스의 새 인스턴스를 만들 때 클래스 이름 뒤에 오는 괄호 안의 인수만 전달하면 됩니다.

age와 같은 다른 매개변수를 추가하려면 __init__ 메소드에도 전달하면 됩니다.

class Shark:
    def __init__(self, name, age):
        self.name = name
        self.age = age

그런 다음 개체 sammy를 만들 때 문에 Sammy의 나이를 전달할 수 있습니다.

sammy = Shark("Sammy", 5)

age를 사용하려면 클래스에서 이를 호출하는 메서드도 만들어야 합니다.

생성자 메서드를 사용하면 객체의 특정 속성을 초기화할 수 있습니다.

둘 이상의 개체 작업

클래스는 동일한 청사진을 기반으로 유사한 개체를 많이 만들 수 있기 때문에 유용합니다.

이것이 어떻게 작동하는지 이해하기 위해 프로그램에 다른 Shark 개체를 추가해 보겠습니다.

class Shark:
    def __init__(self, name):
        self.name = name

    def swim(self):
        print(self.name + " is swimming.")

    def be_awesome(self):
        print(self.name + " is being awesome.")

def main():
    sammy = Shark("Sammy")
    sammy.be_awesome()
    stevie = Shark("Stevie")
    stevie.swim()

if __name__ == "__main__":
  main()

우리는 stevie라는 두 번째 Shark 개체를 만들고 여기에 \Stevie\라는 이름을 전달했습니다. 이 예제에서는 sammy와 함께 be_awesome() 메서드를 사용하고 stevie와 함께 swim() 메서드를 사용했습니다.

프로그램을 실행해 봅시다:

  1. python shark.py
Output
Sammy is being awesome. Stevie is swimming.

출력은 sammy 개체와 stevie 개체, Shark 클래스의 두 개체를 사용하고 있음을 보여줍니다.

클래스를 사용하면 처음부터 각각 만들지 않고도 동일한 패턴을 따르는 둘 이상의 개체를 만들 수 있습니다.

결론

이 자습서에서는 클래스 만들기, 객체 인스턴스화, 생성자 메서드로 속성 초기화 및 동일한 클래스의 둘 이상의 객체 작업을 살펴보았습니다.

객체 지향 프로그래밍은 한 프로그램을 위해 생성된 객체가 다른 프로그램에서 사용될 수 있기 때문에 코드 재사용을 가능하게 하기 때문에 이해해야 할 중요한 개념입니다. 객체 지향 프로그램은 또한 복잡한 프로그램은 작성하기 어렵고 신중한 계획이 필요하기 때문에 더 나은 프로그램 설계를 가능하게 하며, 이로 인해 시간이 지남에 따라 프로그램을 유지 관리하는 데 드는 노력이 줄어듭니다.