diff options
author | Eric V. Smith <ericvsmith@users.noreply.github.com> | 2018-05-14 21:16:52 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-14 21:16:52 (GMT) |
commit | 3059042410dce69806b94be72d5c8055d616f3a3 (patch) | |
tree | c5159a0e2b608d32526b74d92ea0d53f8079cf98 | |
parent | 00717a46a120dd8c8c74970fd75d201a5f42ab18 (diff) | |
download | cpython-3059042410dce69806b94be72d5c8055d616f3a3.zip cpython-3059042410dce69806b94be72d5c8055d616f3a3.tar.gz cpython-3059042410dce69806b94be72d5c8055d616f3a3.tar.bz2 |
bpo-33502: dataclass._Dataclassparams repr: use repr of each member. (GH-6812)
-rw-r--r-- | Lib/dataclasses.py | 12 | ||||
-rw-r--r-- | f.py | 12 | ||||
-rw-r--r-- | j.py | 15 | ||||
-rw-r--r-- | t.py | 20 | ||||
-rw-r--r-- | x.py | 31 |
5 files changed, 84 insertions, 6 deletions
diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index c60eeaa..2ce6a02 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}' ')') @@ -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] @@ -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) @@ -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) @@ -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)) |