Custom Objects =============== Sometimes, probably, you need more power to give details to the generated objects, no problem, Dataclass bakery helps you to generate that special environment you need to test your code using the `_default_attrs` argument in the baker. We are working with two dataclasses, `Customer` and `Address`: :: from dataclasses import dataclass from typing import List from uuid import UUID @dataclass class Customer: id: int name: str spent_money: float address: Address orders: List[UUID] @dataclass class Address street_name: str number: int To change the behaviour with the default values of the baker we need to type: :: from dataclass_bakery import baker defaults = { 'street_name': { '_max_length_': 15 } } baker.make(Address, _attr_defaults=defaults) """ Address(street_name='vnlHYKsDXQkyODI', number=49) """ You can read the default values you can change per generator in the generators page. Also you can change the generator of an attribute: :: from dataclass_bakery.generators.random_str_generator import RandomStrGenerator defaults = { 'number': { '_generator_': RandomStrGenerator } } baker.make(Address, _attr_defaults=defaults) """ Address(street_name='RtfgQkyODI', number='KsDXQkyODI') """ Another possibility is fix a value: :: defaults = { 'number': { '_fixed_value_': 1234 } } baker.make(Address, _attr_defaults=defaults) """ Address(street_name='jdRFDadkXf', number=1234) """ And you can combine some different actions in your generated object: :: from dataclass_bakery.generators.random_float_generator import RandomFloatGenerator defaults = { 'number': { '_generator_': RandomFloatGenerator, '_min_limit_': 30 }, 'street_name': { '_max_length_': 20 } } baker.make(Address, _attr_defaults=defaults) """ Address(number=42.93, street_name='YqgpvEISVKzAlfeemJil') """ Finally you can do all actions you read before in different data class levels: defaults = { 'name': { '_max_length_': 20 }, 'address': { 'number': { '_generator_': RandomFloatGenerator, '_min_limit_': 30 }, 'street_name': { '_max_length_': 20 } } } baker.make(Customer, _attr_defaults=defaults) """ Customer(id=16, name='MRoWdUYJiKbFddoCbeOm', spent_money=23.88, address=Address(number=48.34, street_name='qRRXWiUPusHmOmQgKWPr'), orders=[UUID('cfbbad2d-bc77-474b-8934-b2438e2abb34'), UUID('f2a48ce4-30b4-46e0-b2d1-813be8e87e35')]) """