파이썬 - 클래스 어트리뷰트

안녕하세요, 잠재력을 가진 프로그래머 여러분! 오늘은 파이썬 클래스 어트리뷰트의 흥미로운 세계에 빠지게 될 것입니다. 프로그래밍에 새로운 사람이라도 걱정하지 마세요; 저는 수년간 학생들을 가르쳐 왔던 것처럼, 단계별로 여러분을 이 여정을 안내해 드릴 것입니다. 그럼, 시작해보겠습니다!

Python - Class Attributes

클래스 어트리뷰트 (변수)

클래스 어트리뷰트는 클래스의 특정 인스턴스가 아니라 전체 클래스에 속하는 변수입니다. 이들은 해당 클래스의 모든 객체가 공유하는 특성으로 생각할 수 있습니다.

간단한 예시를 통해 시작해보겠습니다:

class Dog:
species = "Canis familiaris"

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

fluffy = Dog("Fluffy", 3)
buddy = Dog("Buddy", 5)

print(Dog.species)  # 출력: Canis familiaris
print(fluffy.species)  # 출력: Canis familiaris
print(buddy.species)  # 출력: Canis familiaris

이 예시에서, species는 클래스 어트리뷰트입니다. 이는 클래스 내에 직접 정의되지만, 어떤 메서드에도 속하지 않습니다. 모든 Dog 객체는 이 어트리뷰트를 공유합니다.

클래스 어트리뷰트 접근

위의 예시에서 볼 수 있듯이, 클래스 어트리뷰트에 접근할 수 있는 두 가지 방법이 있습니다:

  1. 클래스 자체를 통해: Dog.species
  2. 클래스의 어떤 인스턴스를 통해: fluffy.species 또는 buddy.species

두 가지 방법 모두 같은 결과를 줄 것입니다. "개의 종류는 무엇인가?" 또는 "Fluffy는 무엇인가?"라고 묻는 것과 같습니다 - 답은 같습니다!

클래스 어트리뷰트 수정

클래스 어트리뷰트는 수정할 수 있지만, 주의하세요! 클래스 어트리뷰트를 수정하면, 클래스의 모든 인스턴스에 영향을 줄 것입니다. 예를 들어보겠습니다:

class Cat:
species = "Felis catus"
count = 0

def __init__(self, name):
self.name = name
Cat.count += 1

whiskers = Cat("Whiskers")
mittens = Cat("Mittens")

print(Cat.count)  # 출력: 2
print(whiskers.count)  # 출력: 2
print(mittens.count)  # 출력: 2

Cat.species = "Felis silvestris catus"

print(Cat.species)  # 출력: Felis silvestris catus
print(whiskers.species)  # 출력: Felis silvestris catus
print(mittens.species)  # 출력: Felis silvestris catus

이 예시에서, 우리는 count라는 클래스 어트리뷰트를 사용하여 생성된 고양이의 수를 추적합니다. 새로운 Cat 객체를 생성할 때마다, 우리는 Cat.count를 증가시킵니다. 또한, Cat.species를 수정하여 모든 고양이의 종을 한 번에 변경했습니다.

클래스 어트리뷰트의 중요성

클래스 어트리뷰트는 여러 시나리오에서 매우 유용합니다:

  1. 클래스의 모든 인스턴스에 대해 같아야 하는 상수를 저장합니다.
  2. 클래스의 모든 인스턴스에 걸쳐 데이터를 추적합니다 (우리의 Cat.count 예시와 같습니다).
  3. 필요시 인스턴스에서 재정의할 수 있는 기본 값들을 정의합니다.

내장 클래스 어트리뷰트

파이썬 클래스는 몇 가지 유용한 내장 어트리뷰트를 제공합니다. 몇 가지를 살펴보겠습니다:

class MyClass:
x = 5

def my_method(self):
pass

print(MyClass.__name__)  # 출력: MyClass
print(MyClass.__doc__)  # 출력: None (因为我们没有提供文档字符串)
print(MyClass.__dict__)  # 출력: {'__module__': '__main__', 'x': 5, 'my_method': <function MyClass.my_method at ...>}
print(MyClass.__module__)  # 출력: __main__

내장 클래스 어트리뷰트 접근

여기是一些常见的내장 클래스 어트리뷰트와 접근 방법에 대한 표입니다:

어트리뷰트 설명 접근
name 클래스의 이름 MyClass.name
doc 클래스의 독스트링 MyClass.doc
dict 클래스의 이름 공간을 포함하는 딕셔너리 MyClass.dict
module 클래스가 정의된 모듈의 이름 MyClass.module
bases 베이스 클래스를 포함하는 튜플 MyClass.bases

인스턴스 어트리뷰트

이제 우리는 클래스 어트리뷰트를 이해했으므로, 차이를 보기 위해 인스턴스 어트리뷰트에 간단히 대봅시다. 인스턴스 어트리뷰트는 클래스에서 생성된 각 객체에 특정한 것입니다.

class Student:
school = "Python High"  # 클래스 어트리뷰트

def __init__(self, name, grade):
self.name = name  # 인스턴스 어트리뷰트
self.grade = grade  # 인스턴스 어트리뷰트

alice = Student("Alice", 10)
bob = Student("Bob", 11)

print(Student.school)  # 출력: Python High
print(alice.school)    # 출력: Python High
print(bob.school)      # 출력: Python High

print(alice.name)      # 출력: Alice
print(bob.name)        # 출력: Bob

Student.school = "Python University"
print(alice.school)    # 출력: Python University
print(bob.school)      # 출력: Python University

alice.school = "Python Elementary"
print(alice.school)    # 출력: Python Elementary
print(Student.school)  # 출력: Python University
print(bob.school)      # 출력: Python University

인스턴스 어트리뷰트 Vs 클래스 어트리뷰트

인스턴스와 클래스 어트리뷰트 간의 주요 차이점은 다음과 같습니다:

  1. 클래스 어트리뷰트는 모든 인스턴스가 공유하지만, 인스턴스 어트리뷰트는 각 인스턴스에 고유한 것입니다.
  2. 클래스 어트리뷰트는 클래스 내에 정의되지만, 어떤 메서드에도 속하지 않습니다. 반면, 인스턴스 어트리뷰트는 일반적으로 __init__ 메서드 내에 정의됩니다.
  3. 클래스 어트리뷰트를 변경하면 모든 인스턴스에 영향을 줄 것입니다 (인스턴스가 그것을 재정의하지 않은 경우), 반면 인스턴스 어트리뷰트를 변경하면 오직 해당 인스턴스에만 영향을 줍니다.

기억해주세요, 인스턴스에서 어트리뷰트에 접근하려고 시도할 때, 파이썬은 먼저 인스턴스 어트리뷰트를 찾습니다. 그것을 못 찾으면, 클래스 어트리뷰트를 찾습니다. 이러한 이유로, 우리는 클래스 어트리뷰트를 특정 인스턴스에게 "재정의"할 수 있습니다.

그리고 그렇게 하면 됩니다! 여러분은 파이썬 클래스 어트리뷰트에 대한 급습 과정을 마친 것입니다. 프로그래밍을 마스터하는 키는 연습입니다. 그래서 эти 개념들을 실험해 보세요. 여러분 자신의 클래스를 만들고, 어트리뷰트를 놀리며, 무슨 일이 일어나는지 확인해 보세요. 코딩 잘 하세요!

Credits: Image by storyset