소개
이 랩에서는 Python 의 클래스와 인스턴스를 탐구하고, 객체가 클래스의 인스턴스인지 확인하는 방법을 배웁니다. 먼저 클래스 및 인스턴스 속성을 가진 Dog 클래스를 생성하는 것으로 시작합니다. 그런 다음 Dog 클래스의 인스턴스를 생성하고 해당 속성에 접근합니다.
그 후, 타입 검사를 위해 isinstance()를 사용하는 방법을 배우고, 정확한 일치를 위해 type()과 비교합니다. 이를 통해 객체가 특정 클래스 또는 해당 클래스의 서브클래스에 속하는지 여부를 결정할 수 있으며, Python 에서 객체 지향 프로그래밍에 대한 더 깊은 이해를 제공합니다.
클래스와 인스턴스 탐구
이 단계에서는 Python 의 클래스와 인스턴스에 대해 배웁니다. 클래스는 객체를 생성하기 위한 청사진과 같으며, 인스턴스는 해당 청사진에서 생성된 실제 객체입니다. 클래스와 인스턴스를 이해하는 것은 Python 에서 객체 지향 프로그래밍의 기본입니다.
먼저, Dog라는 간단한 클래스를 생성해 보겠습니다.
LabEx 환경에서 VS Code 편집기를 엽니다.
~/project디렉토리에dog.py라는 새 파일을 생성합니다.~/project/dog.pydog.py에 다음 코드를 추가합니다.## Define a class called Dog class Dog: ## Class attribute species = "Canis familiaris" ## Instance attribute def __init__(self, name, age): self.name = name self.age = age여기서
Dog라는 클래스를 정의합니다.species는 클래스 속성으로,Dog클래스의 모든 인스턴스에서 공유됩니다.__init__메서드는 생성자라고 불리는 특수한 메서드입니다. 새로운Dog객체가 생성될 때 인스턴스 속성name과age를 초기화하는 데 사용됩니다.이제
Dog클래스의 인스턴스를 생성해 보겠습니다.dog.py의 끝에 다음 코드를 추가합니다.## Create instances of the Dog class buddy = Dog("Buddy", 9) miles = Dog("Miles", 4) ## Access instance attributes print(f"{buddy.name} is {buddy.age} years old.") print(f"{miles.name} is {miles.age} years old.") ## Access class attribute print(f"{buddy.name} is a {buddy.species}.") print(f"{miles.name} is a {miles.species}.")이 부분에서는
Dog클래스의 두 인스턴스인buddy와miles를 생성합니다. 그런 다음 점 표기법 (.) 을 사용하여 인스턴스 속성 (name및age) 과 클래스 속성 (species) 에 접근합니다.dog.py스크립트를 실행하려면 VS Code 에서 터미널을 열고 다음 명령을 실행합니다.python dog.py다음 출력을 볼 수 있습니다.
Buddy is 9 years old. Miles is 4 years old. Buddy is a Canis familiaris. Miles is a Canis familiaris.이 출력은
Dog클래스의 인스턴스를 성공적으로 생성하고 해당 속성에 접근했음을 확인합니다.
isinstance() 를 사용한 타입 검사
이 단계에서는 Python 에서 객체가 특정 클래스의 인스턴스인지 확인하기 위해 isinstance() 함수를 사용하는 방법을 배웁니다. 이는 코드가 다양한 유형의 객체를 올바르게 처리하도록 보장하는 데 유용한 도구입니다.
이전 단계의 Dog 클래스를 기반으로, isinstance()를 탐구하기 위해 새로운 Python 파일을 생성해 보겠습니다.
LabEx 환경에서 VS Code 편집기를 엽니다.
~/project디렉토리에type_check.py라는 새 파일을 생성합니다.~/project/type_check.pydog.py에서Dog클래스 정의를 복사하여type_check.py에 붙여넣습니다. 이제type_check.py파일은 다음과 같아야 합니다.class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age이제
isinstance()함수를 사용하기 위한 코드를 추가해 보겠습니다.type_check.py의 끝에 다음 코드를 추가합니다.## Create instances of the Dog class buddy = Dog("Buddy", 9) miles = Dog("Miles", 4) ## Check if buddy is an instance of the Dog class print(isinstance(buddy, Dog)) ## Check if miles is an instance of the Dog class print(isinstance(miles, Dog)) ## Check if a string is an instance of the Dog class print(isinstance("Hello", Dog))여기서는
Dog클래스의 두 인스턴스인buddy와miles를 생성합니다. 그런 다음isinstance()함수를 사용하여 이러한 인스턴스가Dog타입인지 확인합니다. 또한 문자열 "Hello"가Dog클래스의 인스턴스인지 확인합니다.type_check.py스크립트를 실행하려면 VS Code 에서 터미널을 열고 다음 명령을 실행합니다.python type_check.py다음 출력을 볼 수 있습니다.
True True False출력은
buddy와miles가 실제로Dog클래스의 인스턴스이고, 문자열 "Hello"는 그렇지 않음을 보여줍니다.
정확한 일치를 위해 type() 과 비교
이 단계에서는 Python 에서 type() 함수를 사용하고 타입 검사를 위해 isinstance()와 비교하는 방법을 배웁니다. isinstance()는 객체가 클래스 또는 서브클래스의 인스턴스인지 확인하는 반면, type()은 객체의 정확한 타입을 반환합니다.
차이점을 설명하기 위해 Dog 클래스의 서브클래스를 생성한 다음 isinstance()와 type()을 모두 사용하여 인스턴스의 타입을 확인해 보겠습니다.
LabEx 환경에서 VS Code 편집기를 엽니다.
~/project디렉토리에서type_check.py파일을 수정합니다.~/project/type_check.pyDog클래스에서 상속받는GermanShepherd라는 새 클래스를 추가합니다. 이제type_check.py파일은 다음과 같아야 합니다.class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age class GermanShepherd(Dog): def __init__(self, name, age, training_level): super().__init__(name, age) self.training_level = training_level여기서
GermanShepherd는Dog의 서브클래스입니다.Dog클래스에서name및age속성을 상속받고 새로운 속성training_level을 추가합니다.이제
isinstance()및type()함수를 사용하기 위한 코드를 추가해 보겠습니다.type_check.py의 끝에 다음 코드를 추가합니다.## Create instances of the Dog and GermanShepherd classes buddy = Dog("Buddy", 9) sparky = GermanShepherd("Sparky", 3, "Advanced") ## Check types using isinstance() print(f"buddy isinstance Dog: {isinstance(buddy, Dog)}") print(f"sparky isinstance Dog: {isinstance(sparky, Dog)}") print(f"sparky isinstance GermanShepherd: {isinstance(sparky, GermanShepherd)}") ## Check types using type() print(f"type(buddy) == Dog: {type(buddy) == Dog}") print(f"type(sparky) == Dog: {type(sparky) == Dog}") print(f"type(sparky) == GermanShepherd: {type(sparky) == GermanShepherd}")이 부분에서는
Dog클래스의 인스턴스 (buddy) 와GermanShepherd클래스의 인스턴스 (sparky) 를 생성합니다. 그런 다음isinstance()와type()을 사용하여 해당 타입을 확인합니다.type_check.py스크립트를 실행하려면 VS Code 에서 터미널을 열고 다음 명령을 실행합니다.python type_check.py다음 출력을 볼 수 있습니다.
buddy isinstance Dog: True sparky isinstance Dog: True sparky isinstance GermanShepherd: True type(buddy) == Dog: True type(sparky) == Dog: False type(sparky) == GermanShepherd: True출력은
isinstance(sparky, Dog)가True를 반환하는 것을 보여줍니다. 왜냐하면sparky는Dog의 서브클래스인GermanShepherd클래스의 인스턴스이기 때문입니다. 그러나type(sparky) == Dog는False를 반환합니다. 왜냐하면type(sparky)는 정확한 타입인GermanShepherd를 반환하고Dog를 반환하지 않기 때문입니다.
요약
이 랩에서는 Python 에서 클래스와 인스턴스의 기본 사항을 탐구했습니다. 클래스 속성과 __init__ 생성자 내에서 초기화된 인스턴스 속성을 포함하여 클래스를 정의하는 방법을 배웠습니다.
그런 다음 Dog 클래스의 인스턴스를 생성하고 특정 속성에 값을 할당했습니다. 마지막으로, 점 표기법을 사용하여 인스턴스 속성 (이름, 나이) 과 클래스 속성 (종) 모두에 접근하여 객체 및 해당 클래스와 관련된 정보를 검색하는 방법을 시연했습니다.



