class Cookie:
# 속성과 메서드 정의
pass
클래스로 만든 객체마다 고유한 성격을 가진다. 과자 틀로 만든 과자를 조금 베어 먹어도 다른 과자에는 아무런 영향이 없는 것처럼 동일한 클래스로 만든 객체들은 서로 전혀 영향을 주지 않는다.
클래스의 가장 간단한 예)
class Cookie:
pass
객체는 클래스로 만들고 1개의 클래스는 무수히 많은 객체를 만들어 낼 수 있다.
a = Cookie()
b = Cookie()
- 객체와 인스턴스의 차이
클래스로 만든 객체를 ‘인스턴스’라고도 한다. 'a = Cookie()'로 만든 a는 객체이다. 그리고 a 객체는 Cookie의 인스턴스이다. 즉, 인스턴스라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위주로 설명할 때 사용한다.
Cookie class를 사용해 생성된 a, b 쿠키를 "객체" 혹은 "Cookie의 인스턴스"라고 한다.
class Person:
name = "Default Name"
p1 = Person()
p2 = Person()
print(p1.name) # Default Name
print(p2.name) # Default Name
# 인스턴스 객체인 p1, p2에는 아직 인스턴스 객체만의 특화된 데이터가 없기 때문에 여전히 클래스 객체의 데이터를 참조한다.
p1.name = "이하늬" # p1 인스턴스 객체의 'name'속성 변경
print(p1.name) # 이하늬
print(p2.name) # Default Name / p2의 데이터는 변경되지 않았기 때문에 여전히 Class의 데이터를 참조한다.
Person.age = 25 # 클래스 객체에 새로운 멤버 변수 name 추가
p2.age = 6 # 인스턴스 객체의 'age' 속성 변경
print(p1.age) # 25 / p1 인스턴스 객체에는 같은 이름의 멤버 변수가 없기 때문에 클래스 객체의 데이터를 참조한다. 두 인스턴스 객체에서 모두 접근 가능
print(p2.age) # 6
print(Person.age) # 25 / 클래스 객체에서도 접근 가능
p1.height = 180 # p1 인스턴스 객체에 새로운 멤버 변수 height 추가
print(p1.height) # 180
print(p2.height)
print(Person.height)
# Traceback (most recent call last):
File "c:\Users\jjoonnoo\Desktop\personal_project\members.py", line 9, in <module>
print(p2.height)
^^^^^^^^^
AttributeError: 'Person' object has no attribute 'height'
# p2 객체와 상위 Person 클래스에는 height 이름을 찾을 수 없음.
# 인스턴스 객체에서 동적으로 멤버 변수를 추가하는 경우, 추가한 인스턴스 객체를 통해서만 접근할 수 있다.