์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- back propagation
- NEXT
- DP
- c++
- ๋๋น ์ฐ์ ํ์
- ๋ค์ต์คํธ๋ผ
- Overfitting
- ๋ฌธ์์ด
- ๋ฏธ๋๋_ํ์ฌ์_๊ณผ๊ฑฐ๋ก
- BFS
- ์ด๋ถ ํ์
- ๋ฐฑํธ๋ํน
- lazy propagation
- ํฌ๋ฃจ์ค์นผ
- dfs
- tensorflow
- ๋ถํ ์ ๋ณต
- ์กฐํฉ๋ก
- ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ๋์ ๋ง๋ก
- pytorch
- ๊ฐ๋์_๋ง๋ก
- ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ
- 2023
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์ฐ์ ์์ ํ
- object detection
- ํ๊ณ ๋ก
- ํ๋ก์ด๋ ์์ฌ
- dropout
- Today
- Total
Doby's Lab
return self, ๋๋ฅผ ์ ๋ฆฌํด ํด์ผ ํ ๊น? (Method Cascading) ๋ณธ๋ฌธ
return self, ๋๋ฅผ ์ ๋ฆฌํด ํด์ผ ํ ๊น? (Method Cascading)
๋๋น(Doby) 2024. 4. 27. 19:55๐ค Problem
ํ์ดํ ์น ๋ด์ ํด๋์ค ๋ด์ ๊ถ๊ธํ ๋ฉ์๋๊ฐ ์์ด์ ์์ค ์ฝ๋๋ฅผ ๋ณด๋ค๊ฐ ๋ฌธ๋ ์ด๋ฐ ๋ฌธ๋ฒ์ ๋ณด๊ฒ ๋ฉ๋๋ค.
def func(self, var1, var2):
...
...
return self
์ ๊ฐ ์์๋ก ๋ง๋ค์ด๋ณธ ๋ฉ์๋์
๋๋ค. ์ ๊ธฐ์ self
๋ฅผ ๋ฆฌํดํ๊ณ ์๋๋ฐ '์ self
๋ฅผ ๋ฆฌํดํ๊ณ ์๋ ๊ฒ์ธ๊ฐ?'๊ฐ ๊ถ๊ธํ์ต๋๋ค.
๊ทธ๋์ ์ด๋ฒ ํฌ์คํ ์์๋ ์ด ๊ฒ์ ๋ํด์ ์ด์ผ๊ธฐํด ๋ด ๋๋ค.
self
๊ฐ ์๋ฏธํ๋ ๋ฐ๊ฐ ์ธ์คํด์ค ๋ณธ์ธ์ ์ฐธ์กฐํ๊ณ ์๋ค๋ ๊ฒ์ ์ด์ ๋ ๋๋ฌด๋ ๋ช
ํํ๊ณ , ๋น์ฐํ ๊ด์ต์
๋๋ค.
ํท๊ฐ๋ฆฌ์ค ์ ์๊ฒ ์ง๋ง, ๋ฌธ๋ฒ์ด ์๋๋ผ ๊ด์ต์
๋๋ค. self
๊ฐ ์๋ ๋ค๋ฅธ ๊ฑธ๋ก ํด๋ ์๋ํฉ๋๋ค. ๊ฑฐ์ ๋ฌธ๋ฒ์ฒ๋ผ ์จ์ ๊ทธ๋ ์ต๋๋ค. ์๋์ ์ฝ๋๋ ์ ์์ ์ผ๋ก ์๋ํ๊ฑฐ๋ ์ :)
(๋ฌผ๋ก , ํ์ค์์ ์ ๋ฌ๋ฉด ๋ง์ ์์ ๋จน์ ์๋ ์์ต๋๋ค...)
class Person():
def __init__(myself, age: int):
myself.age = age
def print_age(myself):
print(myself.age)
p1 = Person(24)
p1.print_age()
๐ Solution: Method Cascading๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด์
https://stackoverflow.com/questions/43380042/purpose-of-return-self-python
์๋ฌดํผ, return self
๋ฅผ ํ๋ ๊ฒฝ์ฐ๋ ๋ค์ ์์๋ก ๋๋ฌด ๋ช
์พํ๊ฒ ์ค๋ช
ํ ์ ์์ต๋๋ค.
์ ๋ ํผ๋ฐ์ค์ฒ๋ผ ๊ฐ์ ์ฝ๋๋ก ์ค๋ช ์ ํด๋ณด๊ฒ ์ต๋๋ค.
class Counter():
def __init__(self, start: int = 1):
self.val = start
def increment(self):
self.val += 1
def decrement(self):
self.val -= 1
์ ํด๋์ค์์ ์ธ์คํด์ค๋ฅผ ์ ์ธํ์ฌ, ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์คํ์์ผ ๋ด ์๋ค.
c = Counter()
c.increment().decrement()
๋ฐ๋ก ์ด๋ฐ ์๋ฌ๊ฐ ๋์ง ์๋์? AttributeError: 'NoneType' object has no attribute 'decrement'
์๋ฌ ๋ด์ฉ์ ๋ณด๋ฉด, ํ์ฌ ๊ฐ์ฒด(์ธ์คํด์ค)๋ decrement์ ๊ฐ์ attribute(์์ฑ)์ด ์๋ค๊ณ ๋งํ๊ณ ์์ต๋๋ค. ์ด๊ฒ ๋ฌด์จ ๋ง๋ ์ ๋๋ ์๋ฆฐ๊ฐ ์ถ์ต๋๋ค.
c
๋ผ๋ ๊ฐ์ฒด์์ increment๋ฅผ ํ๊ณ , decrement ํ ๊ฑด๋ฐ c
๊ฐ NoneType์ด๋ผ๋ ๊ฒ์ ํ์ฌ ์ด๋ ํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ง ์๋ค๋ ๋ป์
๋๋ค. ๊ทธ๋ฌ๋ฉด, increment๊น์ง๋ ์ ์ฑ๊ณตํ๋ค๋ ๋ป์ด๊ฒ ๋ค์. ๋ฐ๋๋ก increment๋ฅผ ํ c
์์ decrement๋ ์ ์คํจํ์๊น์?
๊ทผ๋ฐ ์ ์๋ง์. c
์์ increment๋ฅผ ์ํํ์ ๋, ์ฐ๋ฆฌ๋ ์ ์ฌ์ ํ ๊ทธ ๊ฒฐ๊ณผ๊ฐ c
๋ฅผ ๊ฐ๋ฆฌํจ๋ค๊ณ ์๊ฐํ๊ณ ์๋์? increment๋ decrement ๊ตฌํ๋ถ์์๋ ์๋ฌด๊ฒ๋ ๋ฆฌํดํ๊ณ ์์ง ์์๋ฐ ๋ง์
๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์, ๋ค์ ๋งํด ๊ฐ์ฒด์ ๋ํ ๋ฉ์๋๋ฅผ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ฉ์๋๋ฅผ ์ํํ ๊ฒฐ๊ณผ(์ธ์คํด์ค)๋ฅผ ๋ฆฌํดํด์ค๋ค๋ฉด, ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด์ ๊ฐ์ด ๋ฉ์๋๋ฅผ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ Method Cascading์ด๋ผ๊ณ ํฉ๋๋ค.
๊ทธ๋์ c
๋ผ๋ ๊ฐ์ฒด๊ฐ ์ฐ์์ ์ผ๋ก ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ด ํด๋์ค๋ฅผ ๋ค์ ์ ์ธํด์ฃผ์ด์ผ ํฉ๋๋ค.
class Counter():
def __init__(self, start: int = 1):
self.val = start
def increment(self):
self.val += 1
return self
def decrement(self):
self.val -= 1
return self
๐ Reference
https://stackoverflow.com/questions/43380042/purpose-of-return-self-python
'Code about AI > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋์ฝ๋ค ๋ง๊ณ ๋ค๋ฅธ ๊ฐ์ ํ๊ฒฝ์ ์์๊น? (venv) (1) | 2024.05.11 |
---|---|
๋ฌธ์์ด์ ๋ ๋ค์ํ๊ฒ ์ฌ์ฉํ ์๋ ์์๊น? (Raw String, docstring, ๋ฌธ์ํ) (0) | 2024.05.04 |
์์์ ํ ๋, super().__init__()์ ํ์ง ์๋๋ค๋ฉด? (0) | 2023.11.11 |
(os ๋ชจ๋์ ๋์ฒดํ๋) pathlib ํจํค์ง (0) | 2023.06.26 |
Python์ Generator์ ๋ํ์ฌ (2) | 2023.01.10 |