Skip to content

Commit 3059042

Browse files
authored
bpo-33502: dataclass._Dataclassparams repr: use repr of each member. (GH-6812)
1 parent 00717a4 commit 3059042

File tree

5 files changed

+84
-6
lines changed

5 files changed

+84
-6
lines changed

Lib/dataclasses.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -274,12 +274,12 @@ def __init__(self, init, repr, eq, order, unsafe_hash, frozen):
274274

275275
def __repr__(self):
276276
return ('_DataclassParams('
277-
f'init={self.init},'
278-
f'repr={self.repr},'
279-
f'eq={self.eq},'
280-
f'order={self.order},'
281-
f'unsafe_hash={self.unsafe_hash},'
282-
f'frozen={self.frozen}'
277+
f'init={self.init!r},'
278+
f'repr={self.repr!r},'
279+
f'eq={self.eq!r},'
280+
f'order={self.order!r},'
281+
f'unsafe_hash={self.unsafe_hash!r},'
282+
f'frozen={self.frozen!r}'
283283
')')
284284

285285

f.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from __future__ import annotations
2+
from dataclasses import dataclass
3+
from typing import List
4+
from typing import ClassVar as CV
5+
6+
@dataclass
7+
class A:
8+
a: List[str]
9+
10+
@dataclass
11+
class B(A):
12+
b: CV[int]

j.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
class X:
3+
def __init__(self, value):
4+
self.value = value
5+
def __str__(self):
6+
return str(self.value)
7+
def __format__(self, fmt):
8+
assert fmt[0] == '='
9+
self.value = eval(fmt[1:])
10+
return ''
11+
12+
x = X(3)
13+
print(x)
14+
f'{x:=4}' # Behold!
15+
print(x)

t.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from dataclasses import *
2+
3+
class D:
4+
"""A descriptor class that knows its name."""
5+
def __set_name__(self, owner, name):
6+
self.name = name
7+
def __get__(self, instance, owner):
8+
if instance is not None:
9+
return 1
10+
return self
11+
12+
from dataclasses import *
13+
14+
@dataclass
15+
class C:
16+
d: int = field(default=D(), init=False)
17+
18+
@dataclass
19+
class E(C):
20+
e: int = field(default=D(), init=False)

x.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#from __future__ import annotations
2+
from typing import ClassVar, Dict, get_type_hints
3+
from dataclasses import *
4+
5+
class Starship:
6+
stats: ClassVar[Dict[str, int]] = {}
7+
8+
#print(get_type_hints(Starship))
9+
10+
#class A:
11+
# a: Dict[int, C]
12+
13+
#print(get_type_hints(A))
14+
15+
cv = [ClassVar[int]]
16+
17+
@dataclass
18+
class C:
19+
CVS = [ClassVar[str]]
20+
a: cv[0]
21+
b: 'C'
22+
c: 'CVS[0]'
23+
x: 'ClassVar["int"]'
24+
y: 'ClassVar[C]'
25+
26+
print()
27+
print(C.__annotations__)
28+
print(C.__dataclass_fields__)
29+
30+
31+
#print(get_type_hints(C))

0 commit comments

Comments
 (0)