웹사이트 검색

Python 3의 클래스 및 인스턴스 변수 이해


소개

클래스 수준 또는 인스턴스 수준에서 사용할 변수. 변수는 기본적으로 프로그램에서 사용하는 값을 나타내는 기호입니다.

클래스 수준에서 변수는 클래스 변수라고 하고 인스턴스 수준의 변수는 인스턴스 변수라고 합니다.

인스턴스 간에 변수가 일관될 것으로 예상하거나 변수를 초기화하려는 경우 클래스 수준에서 해당 변수를 정의할 수 있습니다. 인스턴스 간에 변수가 크게 변경될 것으로 예상되면 인스턴스 수준에서 변수를 정의할 수 있습니다.

소프트웨어 개발의 원칙 중 하나는 반복하지 말라는 DRY 원칙입니다. 이 원칙은 코드 내에서 반복을 제한하는 데 맞춰져 있으며 개체 지향 프로그래밍은 중복성을 줄이기 때문에 DRY 원칙을 준수합니다.

이 튜토리얼은 Python 내 객체 지향 프로그래밍에서 클래스 및 인스턴스 변수를 모두 사용하는 방법을 보여줍니다.

전제 조건

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

클래스 변수

클래스 변수는 클래스 구성 내에서 정의됩니다. 클래스 자체가 소유하기 때문에 클래스 변수는 클래스의 모든 인스턴스에서 공유됩니다. 따라서 클래스 변수를 사용하여 변수를 초기화하지 않는 한 일반적으로 모든 인스턴스에 대해 동일한 값을 갖습니다.

모든 메서드 외부에서 정의된 클래스 변수는 일반적으로 클래스 헤더 바로 아래, 생성자 메서드 및 기타 메서드 앞에 배치됩니다.

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

클래스 변수는 다음과 같습니다.

class Shark:
    animal_type = "fish"

여기서 animal_type 변수에는 \fish\ 값이 할당됩니다.

Shark 클래스의 인스턴스를 생성하고(new_shark라고 함) 점 표기법을 사용하여 변수를 인쇄할 수 있습니다.

class Shark:
    animal_type = "fish"

new_shark = Shark()
print(new_shark.animal_type)

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

  1. python shark.py
Output
fish

우리 프로그램은 변수의 값을 반환합니다.

클래스 변수를 몇 개 더 추가하고 출력해 보겠습니다.

class Shark:
    animal_type = "fish"
    location = "ocean"
    followers = 5

new_shark = Shark()
print(new_shark.animal_type)
print(new_shark.location)
print(new_shark.followers)

다른 변수와 마찬가지로 클래스 변수는 Python에서 사용할 수 있는 모든 데이터 유형으로 구성될 수 있습니다. 이 프로그램에는 문자열과 정수가 있습니다. python shark.py 명령으로 프로그램을 다시 실행하고 출력을 검토해 보겠습니다.

Output
fish ocean 5

new_shark의 인스턴스는 모든 클래스 변수에 액세스할 수 있으며 프로그램을 실행할 때 출력할 수 있습니다.

클래스 변수를 사용하면 클래스를 구성할 때 변수를 정의할 수 있습니다. 이러한 변수와 관련 값은 클래스의 각 인스턴스에 액세스할 수 있습니다.

인스턴스 변수

인스턴스 변수는 클래스의 인스턴스가 소유합니다. 이는 클래스의 각 개체 또는 인스턴스에 대해 인스턴스 변수가 다르다는 것을 의미합니다.

클래스 변수와 달리 인스턴스 변수는 메서드 내에서 정의됩니다.

아래 Shark 클래스 예제에서 nameage는 인스턴스 변수입니다.

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

Shark 개체를 만들 때 생성자 메서드 또는 다른 메서드 내에서 매개 변수로 전달되는 이러한 변수를 정의해야 합니다.

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

new_shark = Shark("Sammy", 5)

클래스 변수와 마찬가지로 인쇄 인스턴스 변수를 유사하게 호출할 수 있습니다.

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

new_shark = Shark("Sammy", 5)
print(new_shark.name)
print(new_shark.age)

python shark.py로 위의 프로그램을 실행하면 다음과 같은 결과가 나타납니다.

Output
Sammy 5

우리가 받는 출력은 new_shark의 개체 인스턴스에 대해 초기화한 변수 값으로 구성됩니다.

stevie라는 Shark 클래스의 또 다른 객체를 생성해 보겠습니다.

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

new_shark = Shark("Sammy", 5)
print(new_shark.name)
print(new_shark.age)

stevie = Shark("Stevie", 8)
print(stevie.name)
print(stevie.age)
Output
Sammy 5 Stevie 8

new_shark 개체와 같은 stevie 개체는 인스턴스 변수에 값을 할당하기 위해 Shark 클래스의 해당 인스턴스에 특정한 매개 변수를 전달합니다.

클래스의 개체가 소유하는 인스턴스 변수는 각 개체 또는 인스턴스가 해당 변수에 다른 값을 할당할 수 있도록 합니다.

클래스 및 인스턴스 변수를 함께 사용하기

클래스 변수와 인스턴스 변수는 동시에 활용되는 경우가 많으므로 우리가 만든 Shark 클래스를 사용하여 이에 대한 예를 살펴보겠습니다. 프로그램의 주석은 프로세스의 각 단계를 설명합니다.

class Shark:

    # Class variables
    animal_type = "fish"
    location = "ocean"

    # Constructor method with instance variables name and age
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # Method with instance variable followers
    def set_followers(self, followers):
        print("This user has " + str(followers) + " followers")


def main():
    # First object, set up instance variables of constructor method
    sammy = Shark("Sammy", 5)

    # Print out instance variable name
    print(sammy.name)

    # Print out class variable location
    print(sammy.location)

    # Second object
    stevie = Shark("Stevie", 8)

    # Print out instance variable name
    print(stevie.name)

    # Use set_followers method and pass followers instance variable
    stevie.set_followers(77)

    # Print out class variable animal_type
    print(stevie.animal_type)

if __name__ == "__main__":
    main()

python shark.py로 프로그램을 실행하면 다음과 같은 결과가 나타납니다.

Output
Sammy ocean Stevie This user has 77 followers fish

여기에서는 Shark 클래스의 두 객체인 sammystevie에서 클래스와 인스턴스 변수를 모두 사용했습니다.

결론

객체 지향 프로그래밍에서 클래스 수준의 변수는 클래스 변수라고 하고 개체 수준의 변수는 인스턴스 변수라고 합니다.

이러한 차별화를 통해 클래스 변수를 사용하여 변수에 할당된 특정 값으로 객체를 초기화하고 인스턴스 변수가 있는 각 객체에 대해 서로 다른 변수를 사용할 수 있습니다.

클래스 및 인스턴스별 변수를 사용하면 코드가 DRY 원칙을 준수하여 코드 내 반복을 줄일 수 있습니다.