New submission from simple_coder878 <junk...@gmail.com>:
Simple example from dataclasses import dataclass, field @dataclass(init=False) class TestObject(object): m: str = field(default='hi') k: list = field(default_factory=list) def test(self): print(f'm is {self.m} ') print(f'k is {self.k}') if __name__ == '__main__': myobject = TestObject() myobject.test() Produces: Traceback (most recent call last): File "H:\unit_test\tests_dataclass.py", line 81, in <module> myobject.test() File "H:\unit_test\tests_dataclass.py", line 76, in test print(f'k is {self.k}') AttributeError: 'TestObject' object has no attribute 'k' m is hi So m is initialized to hi but k just disappears But wait there's more! If i do from dataclasses import dataclass, field @dataclass(init=False) class TestObject(object): m: str = field(default='hi') k: list = field(default_factory=list) def test(self): print(f'm is {self.m} ') print(f'k is {self.k}') @dataclass class InheritedTestObject(TestObject): def __post_init__(self): super().__init__() print(f'Inherited m is {self.m} ') print(f'Inherited k is {self.k}') print(f'Inherited g is {self.k}') if __name__ == '__main__': myobject = InheritedTestObject() myobject.test() It produces: Inherited m is hi Inherited k is [] Inherited g is [] m is hi k is [] Process finished with exit code 0 NO ERRORS! It seems like a bug to me, but what is the expected behavior in this case? I would expect the first case to not error out and should have an empty list. I've only tested this on Python 3.9 so far. ---------- components: ctypes messages: 403182 nosy: simple_coder878 priority: normal severity: normal status: open title: dataclass init=False field with default works but default_factory does not type: behavior versions: Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue45366> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com