### Proposed Study Order

It’s better to study **caching properties** before [`lazy_instantiation.py`](https://github.com/ehsankarbasian/DesignPatterns/blob/main/Python/Others/lazy_instantiation/lazy_instantiation.py),  
Because they provide useful background for understanding lazy instantiation.

1. [`static_cache.py`](https://github.com/ehsankarbasian/DesignPatterns/blob/main/Python/Others/lazy_instantiation/static_cache.py)  
2. [`semi_dynamic_cache.py`](https://github.com/ehsankarbasian/DesignPatterns/blob/main/Python/Others/lazy_instantiation/semi_dynamic_cache.py)  
3. [`dynamic_cache.py`](https://github.com/ehsankarbasian/DesignPatterns/blob/main/Python/Others/lazy_instantiation/dynamic_cache.py)  
4. [`how_to_use.py`](https://github.com/ehsankarbasian/DesignPatterns/blob/main/Python/Others/lazy_instantiation/how_to_use.py)

After completing these, move on to  
[`lazy_instantiation.py`](https://github.com/ehsankarbasian/DesignPatterns/blob/main/Python/Others/lazy_instantiation/lazy_instantiation.py)  
and implement your own code following its pattern.

Read the **thread-safe** files only if necessary:

- [`simple_thread_safe.py`](https://github.com/ehsankarbasian/DesignPatterns/blob/main/Python/Others/lazy_instantiation/simple_thread_safe.py)  
- [`dynamic_cache_thread_safe.py`](https://github.com/ehsankarbasian/DesignPatterns/blob/main/Python/Others/lazy_instantiation/dynamic_cache_thread_safe.py)  
- [`how_to_use_thread_safe.py`](https://github.com/ehsankarbasian/DesignPatterns/blob/main/Python/Others/lazy_instantiation/how_to_use_thread_safe.py)
