diff --git a/pagefind/fragment/en-us_f2a0f3e.pf_fragment b/pagefind/fragment/en-us_f2a0f3e.pf_fragment new file mode 100644 index 00000000..b5c2a8b5 Binary files /dev/null and b/pagefind/fragment/en-us_f2a0f3e.pf_fragment differ diff --git a/pagefind/fragment/en-us_ff9e431.pf_fragment b/pagefind/fragment/en-us_ff9e431.pf_fragment deleted file mode 100644 index 3a2632cc..00000000 Binary files a/pagefind/fragment/en-us_ff9e431.pf_fragment and /dev/null differ diff --git a/pagefind/index/en-us_18656bc.pf_index b/pagefind/index/en-us_18656bc.pf_index deleted file mode 100644 index cd282d43..00000000 Binary files a/pagefind/index/en-us_18656bc.pf_index and /dev/null differ diff --git a/pagefind/index/en-us_32b3e2b.pf_index b/pagefind/index/en-us_32b3e2b.pf_index new file mode 100644 index 00000000..a7440d07 Binary files /dev/null and b/pagefind/index/en-us_32b3e2b.pf_index differ diff --git a/pagefind/index/en-us_569df36.pf_index b/pagefind/index/en-us_569df36.pf_index deleted file mode 100644 index e65b2a34..00000000 Binary files a/pagefind/index/en-us_569df36.pf_index and /dev/null differ diff --git a/pagefind/index/en-us_5ae8617.pf_index b/pagefind/index/en-us_5ae8617.pf_index new file mode 100644 index 00000000..ddaef66d Binary files /dev/null and b/pagefind/index/en-us_5ae8617.pf_index differ diff --git a/pagefind/index/en-us_7c91685.pf_index b/pagefind/index/en-us_7c91685.pf_index new file mode 100644 index 00000000..74090f7e Binary files /dev/null and b/pagefind/index/en-us_7c91685.pf_index differ diff --git a/pagefind/index/en-us_8d29938.pf_index b/pagefind/index/en-us_8d29938.pf_index new file mode 100644 index 00000000..06097fc6 Binary files /dev/null and b/pagefind/index/en-us_8d29938.pf_index differ diff --git a/pagefind/index/en-us_96fe2f8.pf_index b/pagefind/index/en-us_96fe2f8.pf_index new file mode 100644 index 00000000..2f6f2bd8 Binary files /dev/null and b/pagefind/index/en-us_96fe2f8.pf_index differ diff --git a/pagefind/index/en-us_ce84bb8.pf_index b/pagefind/index/en-us_ce84bb8.pf_index deleted file mode 100644 index 46364028..00000000 Binary files a/pagefind/index/en-us_ce84bb8.pf_index and /dev/null differ diff --git a/pagefind/index/en-us_ddab6d8.pf_index b/pagefind/index/en-us_ddab6d8.pf_index new file mode 100644 index 00000000..5a222657 Binary files /dev/null and b/pagefind/index/en-us_ddab6d8.pf_index differ diff --git a/pagefind/index/en-us_e2f7899.pf_index b/pagefind/index/en-us_e2f7899.pf_index deleted file mode 100644 index 654d7d69..00000000 Binary files a/pagefind/index/en-us_e2f7899.pf_index and /dev/null differ diff --git a/pagefind/index/en-us_eec299e.pf_index b/pagefind/index/en-us_eec299e.pf_index deleted file mode 100644 index e24c54f8..00000000 Binary files a/pagefind/index/en-us_eec299e.pf_index and /dev/null differ diff --git a/pagefind/index/en-us_f767589.pf_index b/pagefind/index/en-us_f767589.pf_index deleted file mode 100644 index 26663b88..00000000 Binary files a/pagefind/index/en-us_f767589.pf_index and /dev/null differ diff --git a/pagefind/pagefind-entry.json b/pagefind/pagefind-entry.json index 7e7597e5..2dcab331 100644 --- a/pagefind/pagefind-entry.json +++ b/pagefind/pagefind-entry.json @@ -1 +1 @@ -{"version":"1.0.3","languages":{"en-us":{"hash":"en-us_f3d6bd8299974","wasm":"en-us","page_count":58}}} \ No newline at end of file +{"version":"1.0.3","languages":{"en-us":{"hash":"en-us_553496457348c","wasm":"en-us","page_count":58}}} \ No newline at end of file diff --git a/pagefind/pagefind.en-us_553496457348c.pf_meta b/pagefind/pagefind.en-us_553496457348c.pf_meta new file mode 100644 index 00000000..b33432f7 Binary files /dev/null and b/pagefind/pagefind.en-us_553496457348c.pf_meta differ diff --git a/pagefind/pagefind.en-us_f3d6bd8299974.pf_meta b/pagefind/pagefind.en-us_f3d6bd8299974.pf_meta deleted file mode 100644 index 2b7e0adb..00000000 Binary files a/pagefind/pagefind.en-us_f3d6bd8299974.pf_meta and /dev/null differ diff --git a/post/algebraic-python-enums/index.html b/post/algebraic-python-enums/index.html index e92c96dd..79a1f427 100644 --- a/post/algebraic-python-enums/index.html +++ b/post/algebraic-python-enums/index.html @@ -118,12 +118,10 @@ type which is not allowed. Hence the code won’t run.

class Full: drink: str

Python will happily run the above code and we can access the “variants” under the Glass namespace.

lemonade = Glass.Full('lemonade')
-

If only we could register the variants as the Glass type itself and inherit all its methods.

Redecorate

We can define a decorator that takes all of the nested dataclasses and makes them inherit the outer class.

import inspect
-
-def AlgebraicEnum(cls):
-    for subclass_name, subclass in inspect.getmembers(cls, predicate=inspect.isclass):
-        if subclass_name != "__class__":
-            setattr(cls, subclass_name, type(subclass_name, (cls, subclass), {}))
+

If only we could register the variants as the Glass type itself and inherit all its methods.

Redecorate

We can define a decorator that takes all of the nested dataclasses and makes them inherit the outer class.

def AlgebraicEnum(cls):
+    for name, nested in cls.__dict__.items():
+        if isinstance(nested, type):
+            setattr(cls, name, type(name, (cls, nested), {}))
 
     return cls
 

The inheritance means all methods of the outer class are available on the nested @@ -158,14 +156,13 @@ compare it with Glass.Empty and Glass.Full.

Thes print(diet_coke.report_drink()) print(empty.is_empty()) -

import inspect
-from dataclasses import dataclass
+
from dataclasses import dataclass
 
 
 def AlgebraicEnum(cls):
-    for subclass_name, subclass in inspect.getmembers(cls, predicate=inspect.isclass):
-        if subclass_name != "__class__":
-            setattr(cls, subclass_name, type(subclass_name, (cls, subclass), {}))
+    for name, nested in cls.__dict__.items():
+        if isinstance(nested, type):
+            setattr(cls, name, type(name, (cls, nested), {}))
 
     return cls