diff -pruN 0.3.0-2/.github/workflows/github-actions-tests.yml 0.4.0-1/.github/workflows/github-actions-tests.yml
--- 0.3.0-2/.github/workflows/github-actions-tests.yml	2025-04-22 17:02:57.000000000 +0000
+++ 0.4.0-1/.github/workflows/github-actions-tests.yml	2025-08-07 20:04:59.000000000 +0000
@@ -6,9 +6,9 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        python-version: [ 3.8, 3.9, "3.10", 3.11, 3.12 ]
+        python-version: [ "3.9", "3.10", "3.11", "3.12" ]
         poetry-version: [ 1.2 ]
-        pydantic-version: [ 1.10.0, 2.10 ]
+        pydantic-version: [ 1.10.0, 2.11 ]
         os: [ ubuntu-latest ]
     runs-on: ${{ matrix.os }}
     steps:
diff -pruN 0.3.0-2/debian/changelog 0.4.0-1/debian/changelog
--- 0.3.0-2/debian/changelog	2025-05-21 13:37:52.000000000 +0000
+++ 0.4.0-1/debian/changelog	2025-08-10 12:59:03.000000000 +0000
@@ -1,3 +1,10 @@
+python-lazy-model (0.4.0-1) unstable; urgency=medium
+
+  * Team upload.
+  * New upstream release.
+
+ -- Colin Watson <cjwatson@debian.org>  Sun, 10 Aug 2025 13:59:03 +0100
+
 python-lazy-model (0.3.0-2) unstable; urgency=medium
 
   * Team upload.
diff -pruN 0.3.0-2/lazy_model/parser/new.py 0.4.0-1/lazy_model/parser/new.py
--- 0.3.0-2/lazy_model/parser/new.py	2025-04-22 17:02:57.000000000 +0000
+++ 0.4.0-1/lazy_model/parser/new.py	2025-08-07 20:04:59.000000000 +0000
@@ -1,4 +1,4 @@
-from typing import Any, Optional, Set, Dict
+from typing import TYPE_CHECKING, Any, Optional, Set, Dict
 
 import pydantic_core
 from pydantic import BaseModel, PrivateAttr, ValidationError, TypeAdapter
@@ -97,25 +97,29 @@ class LazyModel(BaseModel):
             attr.__set__(self, value)
         self.__pydantic_validator__.validate_assignment(self, name, value)
 
-    def __getattribute__(self, item):
-        # If __class__ is accessed, return it directly to avoid recursion
-        if item == "__class__":
-            return super().__getattribute__(item)
-
-        # If called on the class itself, delegate to super's __getattribute__
-        if type(self) is type:  # Check if self is a class
-            return super(type, self).__getattribute__(item)
-
-        # For instances, use the object's __getattribute__ to prevent recursion
-        res = object.__getattribute__(self, item)
-        if res is NAO:
-            field_info = self.__class__.model_fields.get(item)
-            alias = field_info.alias or item
-            value = self._store.get(alias, NAO)
-            if value is NAO:
-                value = field_info.get_default()
-            else:
-                value = self._parse_value(item, value)
-            self._set_attr(item, value)
-            res = super(LazyModel, self).__getattribute__(item)
-        return res
+    if not TYPE_CHECKING:
+
+        def __getattribute__(self, item):
+            # If __class__ is accessed, return it directly to avoid recursion
+            if item == "__class__":
+                return super().__getattribute__(item)
+
+            # If called on the class itself,
+            # delegate to super's __getattribute__
+            if type(self) is type:  # Check if self is a class
+                return super(type, self).__getattribute__(item)
+
+            # For instances, use the object's __getattribute__
+            # to prevent recursion
+            res = object.__getattribute__(self, item)
+            if res is NAO:
+                field_info = self.__class__.model_fields.get(item)
+                alias = field_info.alias or item
+                value = self._store.get(alias, NAO)
+                if value is NAO:
+                    value = field_info.get_default()
+                else:
+                    value = self._parse_value(item, value)
+                self._set_attr(item, value)
+                res = super(LazyModel, self).__getattribute__(item)
+            return res
diff -pruN 0.3.0-2/pyproject.toml 0.4.0-1/pyproject.toml
--- 0.3.0-2/pyproject.toml	2025-04-22 17:02:57.000000000 +0000
+++ 0.4.0-1/pyproject.toml	2025-08-07 20:04:59.000000000 +0000
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "lazy-model"
-version = "0.3.0"
+version = "0.4.0"
 description = ""
 authors = ["Roman Right <roman-right@protonmail.com>"]
 license = "Apache-2.0"
@@ -9,7 +9,7 @@ readme = "README.md"
 packages = [{include = "lazy_model"}]
 
 [tool.poetry.dependencies]
-python = ">=3.8,<4.0"
+python = ">=3.9,<4.0"
 pydantic = ">=1.9.0"
 
 [tool.poetry.group.dev.dependencies]
