[issue36662] asdict/astuple Dataclass methods
Karthikeyan Singaravelan
report at bugs.python.org
Fri Apr 19 01:01:37 EDT 2019
Karthikeyan Singaravelan <tir.karthi at gmail.com> added the comment:
asdict method in the benchmark does a direct dictionary construction. Meanwhile dataclasses.asdict does more work in https://github.com/python/cpython/blob/e8113f51a8bdf33188ee30a1c038a298329e7bfa/Lib/dataclasses.py#L1023 . Hence in the example i.asdict() and asdict(i) are not equivalent.
import timeit
from dataclasses import dataclass, asdict
@dataclass
class InventoryItem:
'''Class for keeping track of an item in inventory.'''
name: str
unit_price: float
quantity_on_hand: int = 0
def asdict(self):
data = {'name': self.name,
'unit_price': self.unit_price,
'quantity_on_hand': self.quantity_on_hand,
}
return data
i = InventoryItem(name='widget', unit_price=3.0, quantity_on_hand=10)
setup = """from dataclasses import dataclass, asdict;
@dataclass
class InventoryItem:
'''Class for keeping track of an item in inventory.'''
name: str
unit_price: float
quantity_on_hand: int = 0
def asdict(self):
data = {'name': self.name,
'unit_price': self.unit_price,
'quantity_on_hand': self.quantity_on_hand,
}
return data
i = InventoryItem(name='widget', unit_price=3.0, quantity_on_hand=10)"""
print("asdict(i)")
print(timeit.Timer("asdict(i)", setup=f"{setup}").timeit(number=1_000_000))
print("i.asdict()")
print(timeit.Timer("i.asdict()", setup=f"{setup}").timeit(number=1_000_000))
print("i.inlined_asdict()")
print(timeit.Timer("i.inlined_asdict(i)", setup=f"{setup}; i.inlined_asdict = asdict").timeit(number=1_000_000))
i.inlined_asdict = asdict
assert asdict(i) == i.asdict() == i.inlined_asdict(i)
./python.exe ../backups/bpo36662.py
asdict(i)
11.585838756000001
i.asdict()
0.44129350699999925
i.inlined_asdict()
11.858042807999999
----------
nosy: +xtreak
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue36662>
_______________________________________
More information about the Python-bugs-list
mailing list