[Python] with λ¬Έ
withμ νν λ§νλ 리μμ€ νλμ μ΄κΈ°ν(RAII) ν¨ν΄μ μ 곡νλ μ νμ€ μμλ€.
νΉμ κ°μ²΄μ μμ±κ³Ό μλ©Έ μμ μ μ μ΄ν΄μ 리μμ€μ νμλ₯Ό μλννλ κΈ°λ₯μ μ¬μ©νλ κ²μ΄λ€.
C#μ using - IDisposable λ¬Έκ³Ό λλ±νλ€.
μλ₯Ό λ€λ©΄, μλμ κ°μ΄ μμνμΌμ κ΄λ¦¬νλ λ§€λμ κ°μ²΄λ₯Ό λ§λλ κ²½μ°λ₯Ό μκ°ν΄λ³Ό μ μκ² λ€.
νμΌλ§€λμ λ₯Ό μ¬μ©μ€μΌλλ νμΌμ€νΈλ¦Όμ μ΄μ΄λμ±λ‘ μ¬μ©ν΄μΌ νκ³ , μ¬μ©μ΄ λλ μ΄νμλ μ€νΈλ¦Όμ λ«μμ λ°νν΄μΌ νλ€. λ νμμ λ°λΌμλ λ€ μ΄ μμνμΌμ λ°λ‘ μμ νλλ‘ ν μλ μκ² λ€.
κ·Έλμ withλ¬Έμ μλμ κ°μ ꡬ쑰λ₯Ό λ°λ₯Έλ€.
**with μλ³Έκ°μ²΄ as ν λΉκ°μ²΄
** ...
μλλ κ·Έμ λν μ¬μ©λ‘λ€.
with asλ‘ fileμ΄λΌλ μ΄λ¦μ λ³μλ₯Ό λ°μΈλ©νλ μμ¬μμ withλ¬Έμ΄ μμλκ³ , with λ¬Έμ΄ λλλ©΄ μλμΌλ‘ 리μμ€λ₯Ό μ 리νλ€.
κ·ΈλΌ μ νμ μ μ΄λ»κ² λ§λ€κΉ?
with κ°λ₯ νμ μ μνκΈ°
withμ __enter__μ __exit__λΌλ λ§€μ§λ©μλλ₯Ό ν΅ν΄ μ μλλ€.
asλ₯Ό κ±°λ μμ μμλ __enter__κ° νΈμΆλΌμ λ°μΈλ©ν κ°μ λ°νν΄μ£Όκ³ , with μ’
λ£μ __exit__κ° νΈμΆλΌμ μμμ μ 리ν΄μ€λ€.
μλλ κ·Έμ λν μμ μ½λλ€.

μ 체 ν μ€νΈμ½λ
from random import randint
from io import TextIOWrapper
class TempFileManager:
filename: str
file_stream: TextIOWrapper
def append(self, text: str)->'TempFileManager':
self.file_stream.write(text)
def __init__(self):
self.filename = str(randint(0, 1000000))
pass
def __enter__(self):
print("File created: " + self.filename)
self.file_stream = open(self.filename, "a")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.file_stream.close()
print("File closed: " + self.filename)
pass
<br>
def main():
with TempFileManager() as file: # with μμμ __enter__ νΈμΆ
file.append("Hello")
file.append("World")
file.append("!")
# with μ’
λ£μ __exit__ νΈμΆ
pass
main()