Fix behavior for sub table declaration with intermediate tables

GitOrigin-RevId: 776c96085a2afb36f64d3717cce1d1843be3a171
Change-Id: Ibb1f3094ad0664279f7eb5b762e72423e34768fd
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d57ce77..f40da72 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,7 @@
 - Fixed copy of TOML documents.
 - Fixed behavior on PyPy3.
 - Fixed date, datetime and time handling on Python 3.8.
+- Fixed behavior for sub table declaration with intermediate tables.
 
 
 ## [0.5.2] - 2018-11-09
diff --git a/tomlkit/container.py b/tomlkit/container.py
index bccba1b..2a9974e 100644
--- a/tomlkit/container.py
+++ b/tomlkit/container.py
@@ -492,6 +492,15 @@
         for k, v in other.items():
             self[k] = v
 
+    def get(self, key, default=None):  # type: (Any, Optional[Any]) -> Any
+        if not isinstance(key, Key):
+            key = Key(key)
+
+        if key not in self:
+            return default
+
+        return self[key]
+
     def __contains__(self, key):  # type: (Union[Key, str]) -> bool
         if not isinstance(key, Key):
             key = Key(key)
diff --git a/tomlkit/items.py b/tomlkit/items.py
index 2b77057..53a20f2 100644
--- a/tomlkit/items.py
+++ b/tomlkit/items.py
@@ -968,6 +968,9 @@
         for k, v in other.items():
             self[k] = v
 
+    def get(self, key, default=None):  # type: (Any, Optional[Any]) -> Any
+        return self._value.get(key, default)
+
     def __contains__(self, key):  # type: (Union[Key, str]) -> bool
         return key in self._value
 
@@ -1120,6 +1123,9 @@
         for k, v in other.items():
             self[k] = v
 
+    def get(self, key, default=None):  # type: (Any, Optional[Any]) -> Any
+        return self._value.get(key, default)
+
     def __contains__(self, key):  # type: (Union[Key, str]) -> bool
         return key in self._value