diff --git a/Lib/_pydecimal.py b/Lib/_pydecimal.py
index 0fa152c..edabf72 100644
--- a/Lib/_pydecimal.py
+++ b/Lib/_pydecimal.py
@@ -1674,13 +1674,13 @@
 
     __trunc__ = __int__
 
+    @property
     def real(self):
         return self
-    real = property(real)
 
+    @property
     def imag(self):
         return Decimal(0)
-    imag = property(imag)
 
     def conjugate(self):
         return self
diff --git a/Lib/lib2to3/pytree.py b/Lib/lib2to3/pytree.py
index c425fe6..2a6ef2e 100644
--- a/Lib/lib2to3/pytree.py
+++ b/Lib/lib2to3/pytree.py
@@ -271,7 +271,8 @@
         for child in self.children:
             yield from child.pre_order()
 
-    def _prefix_getter(self):
+    @property
+    def prefix(self):
         """
         The whitespace and comments preceding this node in the input.
         """
@@ -279,12 +280,11 @@
             return ""
         return self.children[0].prefix
 
-    def _prefix_setter(self, prefix):
+    @prefix.setter
+    def prefix(self, prefix):
         if self.children:
             self.children[0].prefix = prefix
 
-    prefix = property(_prefix_getter, _prefix_setter)
-
     def set_child(self, i, child):
         """
         Equivalent to 'node.children[i] = child'. This method also sets the
@@ -380,18 +380,18 @@
         """Return a pre-order iterator for the tree."""
         yield self
 
-    def _prefix_getter(self):
+    @property
+    def prefix(self):
         """
         The whitespace and comments preceding this token in the input.
         """
         return self._prefix
 
-    def _prefix_setter(self, prefix):
+    @prefix.setter
+    def prefix(self, prefix):
         self.changed()
         self._prefix = prefix
 
-    prefix = property(_prefix_getter, _prefix_setter)
-
 def convert(gr, raw_node):
     """
     Convert raw node information to a Node or Leaf instance.
diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py
index d49e8f0..ba9b17c 100644
--- a/Lib/multiprocessing/connection.py
+++ b/Lib/multiprocessing/connection.py
@@ -465,8 +465,13 @@
             self._listener = None
             listener.close()
 
-    address = property(lambda self: self._listener._address)
-    last_accepted = property(lambda self: self._listener._last_accepted)
+    @property
+    def address(self):
+        return self._listener._address
+
+    @property
+    def last_accepted(self):
+        return self._listener._last_accepted
 
     def __enter__(self):
         return self
diff --git a/Lib/multiprocessing/dummy/__init__.py b/Lib/multiprocessing/dummy/__init__.py
index 1abea64..cbb7f49 100644
--- a/Lib/multiprocessing/dummy/__init__.py
+++ b/Lib/multiprocessing/dummy/__init__.py
@@ -98,11 +98,15 @@
     def __init__(self, typecode, value, lock=True):
         self._typecode = typecode
         self._value = value
-    def _get(self):
+
+    @property
+    def value(self):
         return self._value
-    def _set(self, value):
+
+    @value.setter
+    def value(self, value):
         self._value = value
-    value = property(_get, _set)
+
     def __repr__(self):
         return '<%s(%r, %r)>'%(type(self).__name__,self._typecode,self._value)
 
diff --git a/Lib/multiprocessing/dummy/connection.py b/Lib/multiprocessing/dummy/connection.py
index 1984375..f0ce320 100644
--- a/Lib/multiprocessing/dummy/connection.py
+++ b/Lib/multiprocessing/dummy/connection.py
@@ -26,7 +26,9 @@
     def close(self):
         self._backlog_queue = None
 
-    address = property(lambda self: self._backlog_queue)
+    @property
+    def address(self):
+        return self._backlog_queue
 
     def __enter__(self):
         return self
diff --git a/Lib/multiprocessing/managers.py b/Lib/multiprocessing/managers.py
index b9ce84b..43dd02a 100644
--- a/Lib/multiprocessing/managers.py
+++ b/Lib/multiprocessing/managers.py
@@ -628,7 +628,9 @@
         except KeyError:
             pass
 
-    address = property(lambda self: self._address)
+    @property
+    def address(self):
+        return self._address
 
     @classmethod
     def register(cls, typeid, callable=None, proxytype=None, exposed=None,
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index 4955540..376c445 100644
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -1868,8 +1868,13 @@
         self._input = input
         self._output = output
 
-    input  = property(lambda self: self._input or sys.stdin)
-    output = property(lambda self: self._output or sys.stdout)
+    @property
+    def input(self):
+        return self._input or sys.stdin
+
+    @property
+    def output(self):
+        return self._output or sys.stdout
 
     def __repr__(self):
         if inspect.stack()[1][3] == '?':
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index c3777ff..2d702dd 100755
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -761,17 +761,21 @@
 
     # In pax headers the "name" and "linkname" field are called
     # "path" and "linkpath".
-    def _getpath(self):
+    @property
+    def path(self):
         return self.name
-    def _setpath(self, name):
-        self.name = name
-    path = property(_getpath, _setpath)
 
-    def _getlinkpath(self):
+    @path.setter
+    def path(self, name):
+        self.name = name
+
+    @property
+    def linkpath(self):
         return self.linkname
-    def _setlinkpath(self, linkname):
+
+    @linkpath.setter
+    def linkpath(self, linkname):
         self.linkname = linkname
-    linkpath = property(_getlinkpath, _setlinkpath)
 
     def __repr__(self):
         return "<%s %r at %#x>" % (self.__class__.__name__,self.name,id(self))
diff --git a/Lib/test/test_pyclbr.py b/Lib/test/test_pyclbr.py
index 2cff1c5..9c216d3 100644
--- a/Lib/test/test_pyclbr.py
+++ b/Lib/test/test_pyclbr.py
@@ -160,7 +160,7 @@
         cm('aifc', ignore=('openfp', '_aifc_params'))  # set with = in module
         cm('sre_parse', ignore=('dump', 'groups', 'pos')) # from sre_constants import *; property
         cm('pdb')
-        cm('pydoc')
+        cm('pydoc', ignore=('input', 'output',)) # properties
 
         # Tests for modules inside packages
         cm('email.parser')
diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py
index c474e60..cbaad76 100644
--- a/Lib/tkinter/ttk.py
+++ b/Lib/tkinter/ttk.py
@@ -1577,20 +1577,17 @@
         self.label['text'] = newval
         self.after_idle(adjust_label)
 
-
-    def _get_value(self):
+    @property
+    def value(self):
         """Return current scale value."""
         return self._variable.get()
 
-
-    def _set_value(self, val):
+    @value.setter
+    def value(self, val):
         """Set new scale value."""
         self._variable.set(val)
 
 
-    value = property(_get_value, _set_value)
-
-
 class OptionMenu(Menubutton):
     """Themed OptionMenu, based after tkinter's OptionMenu, which allows
     the user to select a value from a menu."""
