Skip to content

Commit 9104cf0

Browse files
committed
up
1 parent 2c7d058 commit 9104cf0

2 files changed

Lines changed: 79 additions & 89 deletions

File tree

images/instance-vars.png

27.4 KB
Loading

oop.ipynb

Lines changed: 79 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -311,15 +311,15 @@
311311
},
312312
{
313313
"cell_type": "code",
314-
"execution_count": 9,
314+
"execution_count": 2,
315315
"id": "ce18f956",
316316
"metadata": {},
317317
"outputs": [],
318318
"source": [
319319
"class Vector:\n",
320320
" def __init__(self, components):\n",
321321
" self.components = tuple(float(x) for x in components)\n",
322-
" self.shape = (len(self.components),)\n",
322+
" self.shape = (len(self.components), )\n",
323323
"\n",
324324
" def __repr__(self):\n",
325325
" return f\"Vector({list(self.components)!r})\"\n",
@@ -375,7 +375,7 @@
375375
"인스턴스 변수는 객체가 생성될 때 객체 내부에 저장되는 값을 가리키는 변수이다.\n",
376376
"인스턴스 변수에 할당되는 값은 클래스의 인스턴스가 생성될 때 지정되며,\n",
377377
"생성된 객체의 **속성**<font size='2'>attribute</font>으로 불린다.\n",
378-
"이런 의미에서 인스턴스 변수를 속성 변수라고 부르기도 한다."
378+
"이런 의미에서 인스턴스 변수를 **속성 변수**라고 부르기도 한다."
379379
]
380380
},
381381
{
@@ -473,7 +473,7 @@
473473
},
474474
{
475475
"cell_type": "code",
476-
"execution_count": 22,
476+
"execution_count": 3,
477477
"id": "826e6a81",
478478
"metadata": {},
479479
"outputs": [],
@@ -491,7 +491,7 @@
491491
},
492492
{
493493
"cell_type": "code",
494-
"execution_count": 18,
494+
"execution_count": 4,
495495
"id": "a6f0d7bc",
496496
"metadata": {},
497497
"outputs": [
@@ -501,7 +501,7 @@
501501
"__main__.Vector"
502502
]
503503
},
504-
"execution_count": 18,
504+
"execution_count": 4,
505505
"metadata": {},
506506
"output_type": "execute_result"
507507
}
@@ -532,7 +532,7 @@
532532
},
533533
{
534534
"cell_type": "code",
535-
"execution_count": 19,
535+
"execution_count": 5,
536536
"id": "1d37cbae",
537537
"metadata": {},
538538
"outputs": [
@@ -542,7 +542,7 @@
542542
"True"
543543
]
544544
},
545-
"execution_count": 19,
545+
"execution_count": 5,
546546
"metadata": {},
547547
"output_type": "execute_result"
548548
}
@@ -561,7 +561,7 @@
561561
},
562562
{
563563
"cell_type": "markdown",
564-
"id": "969d778c",
564+
"id": "bc6abff4",
565565
"metadata": {},
566566
"source": [
567567
"`Vector([1, 2, 3])` 객체 생성에 사용된 리스트 `[1, 2, 3]`은\n",
@@ -575,6 +575,65 @@
575575
"``` "
576576
]
577577
},
578+
{
579+
"cell_type": "markdown",
580+
"id": "f831c03e",
581+
"metadata": {},
582+
"source": [
583+
"**`__init__()` 메서드**\n",
584+
"\n",
585+
"클래스의 인스턴스를 생성할 때 `__init__()` 메서드가 가장 먼저 호출되어\n",
586+
"객체 생성에 필요한 준비작업을 진행한다.\n",
587+
"이런 의미에서 `__init__()` 메서드를 **생성자**라고 부른다.\n",
588+
"\n",
589+
"앞서 설명한 대로 `__init__()`는 주로 생성되는 인스턴스의 \n",
590+
"인스턴스 변수 선언을, 즉 생성되는 객체의 속성을 지정하는 일을 수행한다.\n",
591+
"예를 들어, `Vector` 클래스의 인스턴스를 정의하는 아래 코드를 실행한다고 가정하자.\n",
592+
"\n",
593+
"```python\n",
594+
"v = Vector([1, 2, 3])\n",
595+
"```\n",
596+
"\n",
597+
"그러면 파이썬 실행기는 `Vector` 클래스의 `__init__()` 메서드를 아래 형식으로 호출한다.\n",
598+
"\n",
599+
"```python\n",
600+
"__init__(v, [1, 2, 3])\n",
601+
"```\n",
602+
"\n",
603+
"호출 과정에 사용되는 매개변수별 인자는 다음과 같다.\n",
604+
"\n",
605+
"- `self=v` : 생성되는 객체를 가리키는 변수\n",
606+
"- `self.components=[1, 2, 3]` : 벡터의 항목으로 저장될 값들로 구성된 리스트\n",
607+
"\n",
608+
"호출된 생성자는 `self.components` 인스턴스 변수에 \n",
609+
"벡터에 포함될 항목들의 튜플인 `(1.0, 2.0, 3.0)`을 할당하여 저장하고,\n",
610+
"`self.shape`에는 생성되는 벡터의 모양을 기억하도록 한다.\n",
611+
"\n",
612+
"아래 코드는 인스턴스 변수에 할당된 값을 확인하는 방법을 보여준다."
613+
]
614+
},
615+
{
616+
"cell_type": "code",
617+
"execution_count": 17,
618+
"id": "5bc85afb",
619+
"metadata": {},
620+
"outputs": [
621+
{
622+
"name": "stdout",
623+
"output_type": "stream",
624+
"text": [
625+
"Components: (1.0, 2.0, 3.0)\n",
626+
"Shape: (3,)\n"
627+
]
628+
}
629+
],
630+
"source": [
631+
"v = Vector([1, 2, 3])\n",
632+
"\n",
633+
"print(f\"{\"Components:\":11} {v.components}\")\n",
634+
"print(f\"{\"Shape:\":11} {v.shape}\")"
635+
]
636+
},
578637
{
579638
"cell_type": "markdown",
580639
"id": "ec890e08",
@@ -584,18 +643,17 @@
584643
"\n",
585644
"`__init__()` 메서드는 `components` 매개변수로 전달된 값을\n",
586645
"`self.components`라는 변수가 가리키도록 한다.\n",
587-
"반면 `self.shape` 변수는 `self.components`가 가리키는 값의 길이(항목의 개수) 정보를 저장하는\n",
588-
"용도로 사용된다.\n",
646+
"반면 `self.shape` 변수는 `self.components`가 가리키는 벡터의 모양을 저장한다.\n",
647+
"벡터의 모양은 항목의 개수를 이용해 `(3,)`처럼 길이가 1인 튜플로 표현된다.\n",
589648
"\n",
590-
"이처럼 클래스 내부에서 선언되며 `self.` 시작하는 변수를\n",
649+
"이처럼 클래스 내부에서 선언되며 `self.`으로 시작하는 변수를\n",
591650
"**인스턴스 변수**<font size='2'>instance variable</font>라 부른다.\n",
592-
"인스턴스 변수에 저장된 값은 객체를 생성할 때 지정되며,\n",
593-
"생성된 객체의 속성으로 간주된다.\n",
651+
"인스턴스 변수에 저장된 값은 일반적으로 `Vector([1, 2, 3])`처럼 객체를 생성할 때 지정되며,\n",
652+
"앞서 설명한 대로 생성된 객체의 속성으로 객체 자체에 저장된다.\n",
594653
"\n",
595654
"즉 `Vector([1, 2, 3])`으로 객체를 만들면\n",
596-
"그 객체는 자기 안에 `components`와 `shape`라는 두 값을 저장한다.\n",
597-
"이때 `components`에는 `(1, 2, 3)`이 저장되고,\n",
598-
"`shape`에는 항목의 개수를 항목으로 갖는 튜플 `(3,)`이 저장된다.\n"
655+
"그 객체는 자기 안에서 `components`에는 `(1, 2, 3)`을\n",
656+
"`shape`에는 튜플 `(3,)`을 저장한다고 말할 수 있다.\n"
599657
]
600658
},
601659
{
@@ -605,18 +663,11 @@
605663
"source": [
606664
"**`self`의 기능**\n",
607665
"\n",
608-
"클래스로 만든 객체는 자기만의 값을 저장할 수 있다.\n",
609-
"예를 들어 `Vector([1, 2, 3])`로 만든 객체는 `[1, 2, 3]`에 해당하는 값을 자기 안에 저장해야 한다.\n",
610-
"\n",
611-
"이때 `self`는 아래 설명처럼 \"지금 만들어지는 객체\" 또는 \"지금 메서드를 실행하는 객체\"를 가리킨다.\n",
666+
"`self`는 아래 설명처럼 \"지금 만들어지는 객체\" 또는 \"지금 메서드를 실행하는 객체\"를 가리킨다.\n",
612667
"\n",
613-
"- `self.components`: 생성된 객체 안에 저장된 모음 자료형 값을 가리킨다.\n",
614-
"- `self.shape`: 생성된 객체 안에 저장된 모음 자료형 값의 항목의 개수를 가리킨다.\n",
615-
"- `__init__(self, components)`에서의 `self`: 새로 만들어지는 객체를 가리킨다.\n",
616-
"\n",
617-
"예를 들어, `self.components = components`는\n",
618-
"\"`components` 매개변수의 인자로 입력되는 값을 새로 만들어지는 객체 안에 \n",
619-
"동일한 이름인 `components`로 저장하라\"는 뜻이다."
668+
"- `self.components`: 생성되는 객체 안에 저장되는 값을 가리킨다.\n",
669+
"- `self.shape`: 생성되는 객체 안에 저장되는 값을 가리킨다.\n",
670+
"- `__init__(self, components)`: 인스턴스 변수 지정 등 새로 객체 생성에 필요한 기초 작업을 진행한다."
620671
]
621672
},
622673
{
@@ -657,67 +708,6 @@
657708
":::"
658709
]
659710
},
660-
{
661-
"cell_type": "markdown",
662-
"id": "57cdf5fa",
663-
"metadata": {},
664-
"source": [
665-
"**`__init__()` 메서드**\n",
666-
"\n",
667-
"클래스의 인스턴스를 생성할 때 `__init__()` 메서드가 가장 먼저 호출된다.\n",
668-
"이런 의미에서 `__init__()` 메서드를 **생성자**라고 부른다.\n",
669-
"앞서 설명한 대로 `__init__()`는 주로 생성되는 인스턴스의 \n",
670-
"인스턴스 변수 선언을, 즉 생성되는 객체의 속성을 지정하는 일을 수행한다."
671-
]
672-
},
673-
{
674-
"cell_type": "markdown",
675-
"id": "39c30b6f",
676-
"metadata": {},
677-
"source": [
678-
"예를 들어, `Vector` 클래스의 인스턴스를 정의하는 아래 코드를 실행한다고 가정하자.\n",
679-
"\n",
680-
"```python\n",
681-
"v = Vector([1, 2, 3])\n",
682-
"```\n",
683-
"\n",
684-
"그러면 파이썬 실행기는 `Vector` 클래스의 `__init__()` 메서드를 아래 형식으로 호출한다.\n",
685-
"\n",
686-
"```python\n",
687-
"__init__(v, [1, 2, 3])\n",
688-
"```\n",
689-
"\n",
690-
"호출 과정에 사용되는 매개변수별 인자는 다음과 같다.\n",
691-
"\n",
692-
"- `self=v` : 생성되는 객체를 가리키는 변수\n",
693-
"- `components=[1, 2, 3]` : 벡터의 항목으로 저장될 값들로 구성된 리스트\n",
694-
"\n",
695-
"호출된 생성자는 `self.components` 인스턴스 변수에 `(1.0, 2.0, 3.0)`을 할당한다.\n",
696-
"아래 코드는 인스턴스 변수에 할당된 값을 확인하는 방법을 보여준다."
697-
]
698-
},
699-
{
700-
"cell_type": "code",
701-
"execution_count": 25,
702-
"id": "2d0a9471",
703-
"metadata": {},
704-
"outputs": [
705-
{
706-
"data": {
707-
"text/plain": [
708-
"(1.0, 2.0, 3.0)"
709-
]
710-
},
711-
"execution_count": 25,
712-
"metadata": {},
713-
"output_type": "execute_result"
714-
}
715-
],
716-
"source": [
717-
"v = Vector([1, 2, 3])\n",
718-
"v.components"
719-
]
720-
},
721711
{
722712
"cell_type": "markdown",
723713
"id": "6834872a",

0 commit comments

Comments
 (0)