[Python-checkins] bpo-33502: dataclass._Dataclassparams repr: use repr of each member. (GH-6812)

Eric V. Smith webhook-mailer at python.org
Mon May 14 17:16:55 EDT 2018


https://github.com/python/cpython/commit/3059042410dce69806b94be72d5c8055d616f3a3
commit: 3059042410dce69806b94be72d5c8055d616f3a3
branch: master
author: Eric V. Smith <ericvsmith at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2018-05-14T17:16:52-04:00
summary:

bpo-33502: dataclass._Dataclassparams repr: use repr of each member. (GH-6812)

files:
A f.py
A j.py
A t.py
A x.py
M Lib/dataclasses.py

diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py
index c60eeaa58368..2ce6a02dcd7a 100644
--- a/Lib/dataclasses.py
+++ b/Lib/dataclasses.py
@@ -274,12 +274,12 @@ def __init__(self, init, repr, eq, order, unsafe_hash, frozen):
 
     def __repr__(self):
         return ('_DataclassParams('
-                f'init={self.init},'
-                f'repr={self.repr},'
-                f'eq={self.eq},'
-                f'order={self.order},'
-                f'unsafe_hash={self.unsafe_hash},'
-                f'frozen={self.frozen}'
+                f'init={self.init!r},'
+                f'repr={self.repr!r},'
+                f'eq={self.eq!r},'
+                f'order={self.order!r},'
+                f'unsafe_hash={self.unsafe_hash!r},'
+                f'frozen={self.frozen!r}'
                 ')')
 
 
diff --git a/f.py b/f.py
new file mode 100644
index 000000000000..02a3668c10ca
--- /dev/null
+++ b/f.py
@@ -0,0 +1,12 @@
+from __future__ import annotations
+from dataclasses import dataclass
+from typing import List
+from typing import ClassVar as CV
+
+ at dataclass
+class A:
+    a: List[str]
+
+ at dataclass
+class B(A):
+    b: CV[int]
diff --git a/j.py b/j.py
new file mode 100644
index 000000000000..9551702cfe9c
--- /dev/null
+++ b/j.py
@@ -0,0 +1,15 @@
+
+class X:
+    def __init__(self, value):
+        self.value = value
+    def __str__(self):
+        return str(self.value)
+    def __format__(self, fmt):
+        assert fmt[0] == '='
+        self.value = eval(fmt[1:])
+        return ''
+
+x = X(3)
+print(x)
+f'{x:=4}'   # Behold!
+print(x)
diff --git a/t.py b/t.py
new file mode 100644
index 000000000000..7484cf9758b3
--- /dev/null
+++ b/t.py
@@ -0,0 +1,20 @@
+from dataclasses import *
+
+class D:
+    """A descriptor class that knows its name."""
+    def __set_name__(self, owner, name):
+        self.name = name
+    def __get__(self, instance, owner):
+        if instance is not None:
+            return 1
+        return self
+
+from dataclasses import *
+
+ at dataclass
+class C:
+    d: int = field(default=D(), init=False)
+
+ at dataclass
+class E(C):
+    e: int = field(default=D(), init=False)
diff --git a/x.py b/x.py
new file mode 100644
index 000000000000..2b78f3e96fc7
--- /dev/null
+++ b/x.py
@@ -0,0 +1,31 @@
+#from __future__ import annotations
+from typing import ClassVar, Dict, get_type_hints
+from dataclasses import *
+
+class Starship:
+    stats: ClassVar[Dict[str, int]] = {}
+
+#print(get_type_hints(Starship))
+
+#class A:
+#    a: Dict[int, C]
+
+#print(get_type_hints(A))
+
+cv = [ClassVar[int]]
+
+ at dataclass
+class C:
+    CVS = [ClassVar[str]]
+    a: cv[0]
+    b: 'C'
+    c: 'CVS[0]'
+    x: 'ClassVar["int"]'
+    y: 'ClassVar[C]'
+
+print()
+print(C.__annotations__)
+print(C.__dataclass_fields__)
+
+
+#print(get_type_hints(C))



More information about the Python-checkins mailing list