def METHOD_NAME():
    object = CClass()
    # writing to BClass changes the result, writing to DClass doesn't
    targets = (AClass, BClass, DClass, CClass, object)
    results = (0, 1, 1, 3, 4)
    for i in range(0, len(targets)):
        targets[i].foo = i
        assert object.foo == results[i], "normal %d" % i
    # make sure that a custom __getattribute__ is used
    BClass.__getattribute__ = custom_get
    for i in range(0, len(targets)):
        targets[i].bar = i
        assert object.bar == results[i] + 100, "custom get %d" % i
    # check correct lookups when deleting attributes
    for i in reversed(range(0, len(targets))):
        assert object.bar == results[i] + 100, "delete %d" % i
        del targets[i].bar
    # make sure a custom __setattr__ is used
    BClass.__setattr__ = custom_set
    object.baz = 9
    assert object.baz == 119, "custom set"