문제Context를 관리하는 프로토콜을 만들어야 할 때 적절하게 클래스를 구현하는 방법해결with 구문으로 __enter__() __exit__() 메소드를 구현하자코드직접 구현__enter__() : 시작 시 동작 정의__exit__() : 종료 시 동작 정의# Connection Class 구현 from socket import socket, AF_INET, SOCK_STREAMclass LazyConnection: def __init__(self, host, port): self.host = host self.port = port self.sock = None def __enter__(self): if self.sock is None: ..
문제부모 클래스를 상속받은 자식 클래스에서 부모의 메소드를 실행하고자 할 때.해결super()를 사용하여 쉽게 부모 클래스의 함수를 실행하자. 코드좋지 않은 예시. 상속 계층이 깊어질 때, 다중 상속일 경우일 때, 직계 부모 클래스를 지정하여 실행하면 불필요하게 메소드가 실행되는 것을 볼 수 있다. # Tricky initialization problem involving multiple inheritance.# Does NOT use super()class Base: def __init__(self): print('Base.__init__')class A(Base): def __init__(self): Base.__init__(self) print('A...
문제 함수에 인자가 너무 많을 때, 특정 파라미터를 고정하고 함수를 실행시켜야 할 때. 해결functions의 partial()를 써보자.정의된 함수에 인자를 고정한 새로운 함수를 선언하는 방법이다. 코드Sourcepartial 함수는 사용자가 정의한 인자들을 미리 받아놓는다newfunc가 선언될 때 *fargs와 **newkeywords가 override되어 newfunc를 반환한다.이때 newfunc는 callable한 객체를 리턴한다.def partial(func, /, *args, **keywords): # *args, **keywords: 미리 설정해 놓는 파라미터 def newfunc(*fargs, **fkeywords): # *fargs, **fkeywords: 나중에 설정할 파라미터..