diff --git a/pythonetc/README.md b/pythonetc/README.md
index 378cb3e..dd11bc2 100644
--- a/pythonetc/README.md
+++ b/pythonetc/README.md
@@ -44,3 +44,6 @@ More:
1. ./numbers.md
1. ./simplenamespace.md
1. ./snippets/to-str.md
+1. ./nullcontext.md
+1. ./enum.md
+1. ./dynamic-class-attribute.md
diff --git a/pythonetc/dynamic-class-attribute.md b/pythonetc/dynamic-class-attribute.md
new file mode 100644
index 0000000..8163483
--- /dev/null
+++ b/pythonetc/dynamic-class-attribute.md
@@ -0,0 +1,37 @@
+[types.DynamicClassAttribute](https://docs.python.org/3/library/types.html#types.DynamicClassAttribute) is a decorator that allows to have a `@property` that behaves differently when it's called from the class and when from the instance.
+
+```python
+from types import DynamicClassAttribute
+
+class Meta(type):
+ @property
+ def hello(cls):
+ return f'hello from Meta ({cls})'
+
+class C(metaclass=Meta):
+ @DynamicClassAttribute
+ def hello(self):
+ return f'hello from C ({self})'
+
+C.hello
+# "hello from Meta ()"
+
+C().hello
+# 'hello from C (<__main__.C object ...)'
+```
+
+Practically, it is used only in `enum` to provide `name` and `value` properties for instances while still allowing to have `name` and `value` class members:
+
+
+```python
+import enum
+
+class E(enum.Enum):
+ value = 1
+
+E.value
+#
+
+E.value.value
+# 1
+```
diff --git a/pythonetc/enum.md b/pythonetc/enum.md
new file mode 100644
index 0000000..069dd1a
--- /dev/null
+++ b/pythonetc/enum.md
@@ -0,0 +1,33 @@
+The module [enum](https://docs.python.org/3/library/enum.html) provides a way to build an enumerable class. It is a class with predefined list of instances, and every instance is bound to an unique constant value.
+
+```python
+from colorsys import rgb_to_hls
+from enum import Enum
+
+class Color(Enum):
+ RED = (1, 0, 0)
+ GREEN = (0, 1, 0)
+ BLUE = (0, 0, 1)
+
+ @property
+ def hls(self):
+ return rgb_to_hls(*self.value)
+
+Color
+#
+
+Color.RED
+#
+
+Color.RED.name
+# 'RED'
+
+Color.RED.value
+# (1, 0, 0)
+
+Color.RED.hls
+# (0.0, 0.5, 1.0)
+
+type(Color.RED) is Color
+# True
+```
diff --git a/pythonetc/nullcontext.md b/pythonetc/nullcontext.md
new file mode 100644
index 0000000..4d38d83
--- /dev/null
+++ b/pythonetc/nullcontext.md
@@ -0,0 +1,41 @@
+Context manager [contextlib.nullcontext](https://docs.python.org/3/library/contextlib.html#contextlib.nullcontext) is helpful when a block of code not always should be executed in a context.
+
+A good example is a function that works with database. If a session is passed, the function will use it. Otherwise, it creates a new session, and does it in a context to guarantee fallback logic to be executed:
+
+```python
+from contextlib import nullcontext
+
+def get_user(id, session=None):
+ if session:
+ context = nullcontext(session)
+ else:
+ context = create_session()
+ with context as session:
+ ...
+```
+
+Another example is optional [suppressing errors](https://t.me/pythonetc/53):
+
+```python
+from contextlib import suppress
+
+def do_something(silent=False):
+ if silent:
+ context = suppress(FileNotFoundError)
+ else:
+ context = nullcontext()
+ with context:
+ ...
+```
+
+It was added in Python 3.7. For earlier python versions DIY:
+
+```python
+from contextlib import contextmanager
+
+@contextmanager
+def nullcontext(value=None):
+ yield value
+```
+
+Another option is to use [ExitStack](https://t.me/pythonetc/415).