super()๋? ๐ฆธ๐ปโ๏ธ
1. super() ์ ์
`super()`๋ ์์๊ณผ ๋คํ์ฑ์ ํ์ฉํ ๋ ์ฌ์ฉ๋๋ ํจ์๋ก, ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ ์์ฑ์ ํธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ด๋ฅผ ํตํด ์ฝ๋์ ์ค๋ณต์ ์ค์ด๊ณ , ๋ค์ค ์์์์๋ ํจ์จ์ ์ผ๋ก ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
`super()`์ ๊ธฐ๋ณธ ๋์
1) ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
class Parent:
def greet(self):
print("Hello from Parent!")
class Child(Parent):
def greet(self):
super().greet() # ๋ถ๋ชจ ํด๋์ค์ greet() ํธ์ถ
print("Hello from Child!")
child = Child()
child.greet()
# csharp ์ถ๋ ฅ
Hello from Parent!
Hello from Child!
2. `super()`์ ์ฃผ์ ํน์ง
- ๋ถ๋ชจ ํด๋์ค ๋ฉ์๋ ํธ์ถ:
- `super()`๋ ์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ ์์ฑ์ ํธ์ถํจ
- ๋ค์ค ์์ ์ง์:
- ๋ค์ค ์์ ์, `super()`๋ ๋ฉ์๋ ํ์ ์์(MRO: Method Resolution Order)์ ๋ฐ๋ผ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถ
- ์ธ์คํด์ค์ ํด๋์ค ๊ฐ์ ๋์ ๋ฐ์ธ๋ฉ:
- ํธ์ถ๋๋ ๋ฉ์๋๋ ํธ์ถ๋ ํด๋์ค ๋ฐ ๊ฐ์ฒด์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๊ฒฐ์
3. `super()`์ ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก
1) ๋ถ๋ชจ ํด๋์ค์ ์ด๊ธฐํ
`super()`๋ฅผ ํ์ฉํ๋ฉด ๋ถ๋ชจ ํด๋์ค์ `__init__` ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ถ๋ชจ ํด๋์ค์ ์ด๊ธฐํ ์์ ์ ์ํํ ์ ์๋ค.
class Parent:
def __init__(self, name):
self.name = name
print(f"Parent initialized with name: {self.name}")
class Child(Parent):
def __init__(self, name, age):
super().__init__(name) # ๋ถ๋ชจ ํด๋์ค์ __init__ ํธ์ถ
self.age = age
print(f"Child initialized with age: {self.age}")
child = Child("Alice", 10)
# csharp ์ถ๋ ฅ
Parent initialized with name: Alice
Child initialized with age: 10
2) ๋ค์ค ์์์์ ๋ฉ์๋ ํ์ ์์ (MRO)
๋ค์ค ์์์ ์ฌ์ฉํ ๋ `super()`๋ MRO(Method Resolution Order)์ ๋ฐ๋ผ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
class A:
def greet(self):
print("Hello from A!")
class B(A):
def greet(self):
print("Hello from B!")
super().greet()
class C(A):
def greet(self):
print("Hello from C!")
super().greet()
class D(B, C):
def greet(self):
print("Hello from D!")
super().greet()
d = D()
d.greet()
# CSS ์ถ๋ ฅ (MRO์ ๋ฐ๋ผ ํธ์ถ):
Hello from D!
Hello from B!
Hello from C!
Hello from A!
# MRO ํ์ธ:
print(D.mro())
# arduino ์ถ๋ ฅ:
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
3) ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ์ ๋ถ๋ชจ ๋ฉ์๋ ํธ์ถ
์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํ์ฅํ๊ฑฐ๋ ์ฌ์ ์ํ ๋ `super()`๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
class Parent:
def greet(self):
print("Hello from Parent!")
class Child(Parent):
def greet(self):
print("Child is about to greet:")
super().greet() # ๋ถ๋ชจ ํด๋์ค์ greet ํธ์ถ
print("Child finished greeting!")
child = Child()
child.greet()
# vbnet ์ถ๋ ฅ:
Child is about to greet:
Hello from Parent!
Child finished greeting!
4. `super()`์ ๋ด๋ถ ๋์
1) `super()`์ ์ ์ธ
`super()`๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ํธ์ถ๋๋ค:
super([type], [object_or_type])
- `type`:
- ๋ถ๋ชจ ํด๋์ค๊ฐ ๊ธฐ์ค์ด ๋๋ ์์ ํด๋์ค
- ์๋ต ์, ํ์ฌ ํด๋์ค๊ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ๋จ
- `object_or_type`:
- ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋์
- ์๋ต ์, ํ์ฌ ๊ฐ์ฒด(`self`)๊ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์
- ์์ :
class A:
def greet(self):
print("Hello from A!")
class B(A):
def greet(self):
print("Hello from B!")
super(B, self).greet() # ๋ถ๋ชจ ํด๋์ค A์ greet ํธ์ถ
b = B()
b.greet()
2) Method Resolution Order (MRO)
MRO๋ ํด๋์ค์ ๋ฉ์๋ ํ์ ์์๋ฅผ ๋ํ๋ธ๋ค.
๋ค์ค ์์ ์ `super()`๊ฐ ์ด๋ค ์์๋ก ๋ถ๋ชจ ํด๋์ค๋ฅผ ํ์ํ๋์ง MRO๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฐ์ ํ๋ค.
- MRO ํ์ธํ๊ธฐ:
print(D.mro()) # ํด๋์ค D์ MRO ์ถ๋ ฅ
5. `super()`์ ์ฅ์
- ์ฝ๋ ์ฌ์ฌ์ฉ:
- ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋์ ์ด๊ธฐํ๋ฅผ ๊ฐ๋จํ ์ฌ์ฌ์ฉํ ์ ์์
- ์ ์ง๋ณด์์ฑ:
- ๋ถ๋ชจ ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์์ ํด๋์ค๋ ์ต์ํ์ ์์ ์ผ๋ก ๋์ ๊ฐ๋ฅ
- ๋ค์ค ์์ ์ง์:
- ๋ค์ค ์์์์์ ๋ณต์กํ ๋ฉ์๋ ํธ์ถ ์ฒด๊ณ๋ฅผ `super()`๋ฅผ ํตํด ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์
- ๊ฐ๋
์ฑ:
- ๋ถ๋ชจ ํด๋์ค์ ํน์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ๋ช ์์ ์ผ๋ก ํด๋์ค ์ด๋ฆ์ ์์ฑํ์ง ์์๋ ๋จ
6. ์ฃผ์์ฌํญ ๋ฐ ํ๊ณ
- ๋ค์ค ์์ ์ ์์ ํ์ธ ํ์:
- MRO๋ฅผ ์ดํดํ์ง ๋ชปํ๋ฉด ์๋์น ์์ ๋ฉ์๋๊ฐ ํธ์ถ๋ ์ ์์
- `super()`๋ ํญ์ MRO์ ๋ฐ๋ผ ๋์:
- ๋ช ์์ ์ผ๋ก ํธ์ถํ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ ํํ๋ ค๋ฉด ํด๋์ค ์ด๋ฆ์ ์ง์ ํธ์ถํด์ผ ํ ์๋ ์์
- ์์ :
class Parent:
def greet(self):
print("Hello from Parent!")
class Child(Parent):
def greet(self):
Parent.greet(self) # ๋ถ๋ชจ ํด๋์ค ์ง์ ํธ์ถ
print("Hello from Child!")
์ ๋ฆฌ ๐งน
- `super()`๋ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋ ๋ฐ ์์ฑ์ ํธ์ถํ๊ธฐ ์ํ ๋๊ตฌ์ด๋ค~
- ๋ค์ค ์์์์ MRO(Method Resolution Order)์ ๋ฐ๋ผ ํธ์ถ ์์๋ฅผ ๊ด๋ฆฌํ๋ค~
- ์ฃผ์ ์ฌ์ฉ ์ฌ๋ก:
- ๋ถ๋ชจ ํด๋์ค ์ด๊ธฐํ ํธ์ถ (`__init__`)
- ๋ถ๋ชจ ๋ฉ์๋ ์ฌ์ฌ์ฉ ๋ฐ ํ์ฅ
- ๋ค์ค ์์์์์ ๋ฉ์๋ ํธ์ถ ๊ด๋ฆฌ
- ์ ์ง๋ณด์์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ , ๋คํ์ฑ์ ํ์ฉํ ํจ์จ์ ์ธ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅํ๋ค~
'AI ๐ค > Python ๐ป' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250127] bin() ํจ์๋?? (0) | 2025.01.27 |
---|---|
[250109] ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming) ํน์ง (0) | 2025.01.09 |
[250106] ์ฌ๊ทํจ์ ์ ๋ฆฌ (0) | 2025.01.06 |
[250106] count() ์ Counter() ์ ์ฐจ์ด์ (0) | 2025.01.06 |
[250103] ๋ฐ์ฝ๋ ์ดํฐ๋? (0) | 2025.01.03 |