인스턴스 변수 vs 클래스 변수
Coddy Python 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 64개 중 13번째.
인스턴스 변수는 각 객체에 고유하며, 클래스 변수는 동일한 클래스의 모든 객체에 의해 공유됩니다.
두 가지 유형의 변수를 모두 포함하는 클래스의 예입니다.
class Student:
# 클래스 변수 - 모든 인스턴스가 공유함
school = "Python High School"
def __init__(self, name, grade):
# 인스턴스 변수 - 각 학생마다 고유함
self.name = name
self.grade = grade학생 객체를 생성합니다:
alice = Student("Alice", "A")
bob = Student("Bob", "B")인스턴스 변수(각 객체에 고유함)에 접근하기:
print(alice.name) # Alice
print(bob.name) # Bob
print(alice.grade) # A
print(bob.grade) # B클래스 변수(모든 객체가 공유함)에 접근하기:
print(alice.school) # Python High School
print(bob.school) # Python High School
print(Student.school) # Python High School이제 클래스 변수를 변경해 보겠습니다:
Student.school = "Python Academy"변경 사항이 모든 인스턴스에 어떤 영향을 미치는지 확인해 보세요:
print(alice.school) # Python Academy
print(bob.school) # Python Academy출력:
Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python Academy객체 생성 후에도 인스턴스 변수를 생성할 수 있습니다:
alice.age = 16 # 인스턴스 변수를 생성합니다
print(alice.age) # 16
# print(bob.age) # 에러가 발생합니다 - bob에게는 age가 없습니다주요 차이점: 인스턴스 변수(self.variable_name으로 생성됨)는 각 객체마다 고유하며, 반면 클래스 변수(클래스 내에서 직접 정의됨)는 모든 객체에 의해 공유됩니다. 클래스 변수를 변경하면 모든 인스턴스에 영향을 미칩니다.
챌린지
쉬움뱅킹 시스템을 완성하세요. 한 파일에서 BankAccount 클래스를 정의하고 다른 파일에서 이를 사용하게 됩니다.
다음 파일들을 작업하게 됩니다:
bank_account.py: 속성과 메서드를 가진BankAccount클래스를 정의합니다.driver.py: 클래스를 임포트하고, 계좌를 생성하며, 클래스 변수를 시연합니다.
단계별 지침을 위해 두 파일에 있는 TODO 주석을 따르세요. 주석은 적절한 변수와 메서드를 사용하여 클래스를 생성하고, 클래스 변수가 모든 인스턴스에 어떻게 영향을 미치는지 보여주는 과정을 안내할 것입니다.
치트 시트
인스턴스 변수는 각 객체마다 고유하며, 클래스 변수는 동일한 클래스의 모든 객체에 의해 공유됩니다.
두 가지 변수 유형을 모두 가진 클래스:
class Student:
# 클래스 변수 - 모든 인스턴스에 의해 공유됨
school = "Python High School"
def __init__(self, name, grade):
# 인스턴스 변수 - 각 학생마다 고유함
self.name = name
self.grade = grade인스턴스 변수 액세스 (각 객체마다 고유):
alice = Student("Alice", "A")
bob = Student("Bob", "B")
print(alice.name) # Alice
print(bob.name) # Bob클래스 변수 액세스 (모든 객체에 의해 공유):
print(alice.school) # Python High School
print(bob.school) # Python High School
print(Student.school) # Python High School클래스 변수를 변경하면 모든 인스턴스에 영향을 미칩니다:
Student.school = "Python Academy"
print(alice.school) # Python Academy
print(bob.school) # Python Academy객체 생성 후 인스턴스 변수 생성:
alice.age = 16 # 이것은 인스턴스 변수를 생성합니다
print(alice.age) # 16직접 해보기
# TODO: bank_account.py에서 BankAccount 클래스를 가져오세요.
from bank_account import BankAccount
# TODO: 다음 세부 정보로 두 개의 계좌를 생성하세요:
# - account1: 소유자 "Alice Smith", 잔액 $1000
# - account2: 소유자 "Bob Jones", 잔액 $2000
# TODO: 두 계좌 모두에 대해 display_info()를 호출하세요.
# TODO: 클래스 변수 interest_rate를 0.03 (3%)으로 변경하세요.
# 다음 형식을 사용하세요: BankAccount.interest_rate = 0.03
# TODO: "After interest rate change:"라는 텍스트를 출력하세요.
# TODO: 두 계좌 모두에 대해 display_info()를 다시 호출하여 두 계좌 모두 새로운 이자율이 적용되었음을 확인하세요.이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.