**TIL at 220727
클래스란 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면이고, 객체란 클래스로 만든 피조물(실제 사례)를 뜻한다.
그렇다면 객체와 인스턴스는 같은 개념이 아닌가...하며 헷갈리기 시작한다. 그렇다면 둘의 차이는 무엇일까?
위의 예시에서 과자 틀로 만든 과자를 객체라고 했다. 그렇다면 과자는 인스턴스일까? 정답은 맞기도 하고 틀리기도 하다. 왜냐하면 무엇이 '인스턴스다'라고 하려면 그 목적어가 필요하기 때문이다!
클래스의 정의
class MyClass:
def my_method():
...
인스턴스 생성
my_instance = MyClass()
클래스를 호출하여 인스턴스를 만든다.
메서드 호출
my_instance.my_method()
속성
my_instance.my_attribute
self.<name>
으로 정의 (만든다)<instance>.<name>
(사용한다)<classname>.<name>
으로 접근 및 할당class Circle():
pi = 3.14 # 클래스 변수 정의
def __init__(self,r):
self.r = r # 인스턴스 변수
c1 = Circle(5) # 인스턴스 생성, 인스턴스 변수 할당 (c1.r = 5)
c2 = Circle(10) # 인스턴스 생성, 인스턴스 변수 할당(c1.r = 10)
print(Circle.pi) # 3.14
print(c1.pi) # 3.14
print(c2.pi) # 3.14
Circle.pi = 5 # 클래스 변수 수정 -> 공용의 변수가 바뀌므로 다같이 바뀜
print(Circle.pi) # 5
print(c1.pi) # 5
print(c2.pi) # 5
class Person:
count = 0
# 인스턴스 변수 설정
def __init__(self, name):
self.name = name
Person.count += 1
person1 = Person('아이유') # 인스턴스 생성
person2 = Person('이찬혁') # 인스턴스 생성
print(Person.count) # 2
인스턴스 변수를 사용하거나, 인스턴스 변수에 값을 설정하는 메서드
클래스 내부에 정의되는 메서드의 기본
호출 시, 첫번째 인자로 인스턴스 자기자신(self)이 전달됨
@classmethod
데코레이터를 사용하여 정의cls
)가 전달됨class MyClass:
@classmethod
def class_method(cls, arg1, ...)
MyClass.class_method(...)
class Person:
count = 0 # 클래스 변수
def __init__(self, name):
self.name = name # 인스턴스 변수(self.<name>)
Person.count += 1 # 인스턴스가 생성될 때마다 클래스 변수를 변경
@classmethod
def number_of_population(cls): # 클래스 변수를 사용하는 클래스 메서드
print(f'인구수는 {cls.count}입니다.') # 클래스 변수(cls.<name>)
person1 = Person('아이유')
person2 = Person('이찬혁')
print(Person.count) # 2
cls
self