From b57aeac82ce6ee3d64cef3b6f7e9f9f2d7813f70 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Mon, 14 May 2018 16:57:30 -0700 Subject: [PATCH] bpo-33502: dataclass._Dataclassparams repr: use repr of each member. (GH-6812) (cherry picked from commit 3059042410dce69806b94be72d5c8055d616f3a3) Co-authored-by: Eric V. Smith --- Lib/dataclasses.py | 12 ++++++------ f.py | 12 ++++++++++++ j.py | 15 +++++++++++++++ t.py | 20 ++++++++++++++++++++ x.py | 31 +++++++++++++++++++++++++++++++ 5 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 f.py create mode 100644 j.py create mode 100644 t.py create mode 100644 x.py diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index c60eeaa5836..2ce6a02dcd7 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -274,12 +274,12 @@ class _DataclassParams: 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 00000000000..02a3668c10c --- /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 + +@dataclass +class A: + a: List[str] + +@dataclass +class B(A): + b: CV[int] diff --git a/j.py b/j.py new file mode 100644 index 00000000000..9551702cfe9 --- /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 00000000000..7484cf9758b --- /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 * + +@dataclass +class C: + d: int = field(default=D(), init=False) + +@dataclass +class E(C): + e: int = field(default=D(), init=False) diff --git a/x.py b/x.py new file mode 100644 index 00000000000..2b78f3e96fc --- /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]] + +@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))