tyro
tyro copied to clipboard
Mutable default arguments are double initialized
A minimum replicable example:
from dataclasses import dataclass, field
import tyro
import random
@dataclass
class TestDataclass:
val: int = 1
def __post_init__(self):
self.val *= 2
def func1(data:TestDataclass=TestDataclass()):
print(data.val)
if __name__ == "__main__":
func1() # prints 2
tyro.cli(func1) # prints 4
When using tyro.cli
, the __post_init__
function is called twice on the same data
instance. This also happens to non-data class instances' __init__
functions.
tyro version: 0.8.5