WIL - 221205

happypath·2022년 12월 11일
0

WIL

목록 보기
2/2

1. Future annotation

from __future__ import annotations

Forward reference를 해결해 주는 친구!
회사에서 typing을 할 때 항상 임포트 해 온 뒤에 작업하시는 걸 봤는데, 찾아보니 아래와 같은 경우를 해결할 때 필요한 것이었다.

class Example:
	# 자기자신을 참조하는 경우
	def name(self, a: Example):
    	...
        
	# 코드 순서상 아래에 있는 클래스를 참조하는 경우
    def address(self, b: Other):
    	...
        
class Other:
	...

2. Frozen set

단어 그대로 '얼어 붙은' set 데이터라고 생각하면 쉽다. 한 번 생성되고 나면 immutable하기 때문에 튜플처럼 값 변경이 불가능하다.
멀티쓰레드 기반 동시/병렬 프로세싱이 발달하면서, 여러 쓰레드가 동시에 데이터를 변경하게 되면 버그가 발생할 수 있음.
파이썬에서는 프로그램 실행 중에 데이터가 변경되는 것을 막기 위해 tuple, namedtuple, frozenset 등의 타입 제공

  • str, int, float 등의 타입도 immutable
  • Iterable 타입이면 모두 frozenset으로 변환 가능

- 불변/가변 객체 대응 관계

  • tuple - list
  • namedtuple - dict
  • frozenset - set

파이썬의 불변(immutable) 자료구조 - DaleSeo

3. SQLAlchemy session stage

  • flush : DB에 persistent layer의 변경 사항들을 동기화. commit이 되는 건 아니고, 그전에 DB와 상태를 맞추는 것이다
  • commit : DB에 변경 사항 실제로 반영

Expire & Refresh : all un-flushed changes on an object are discarded
persistent layer 상에서 발생한 변화들을 리셋하는 것

  • expire : persistent layer로 불러온, 혹은 이곳에서 변화 시킨 오브젝트를 삭제하고, 다음번 호출시 최근 상태의 오브젝트를 다시 불러옴
user = session.query(User).filter_by(name="user1").first()
user.name = "user2"

session.expire(user)
user.name
>>> 'user1'
  • refresh : 오브젝트를 최신 상태로 다시 가져오는 것(immediate SELECT for the object’s row), expire과 다른 점은 바로 즉시 select가 실행된다는 것
    SQLAlchemy Docs - refreshing & expiring

4. Happy path testing

어떤 에러도, 이슈도, 엣지 케이스도 없이 테스트가 정확히 원하는 결과 상황을 만드는 것

0개의 댓글