diff --git a/homeassistant/helpers/entity.py b/homeassistant/helpers/entity.py index cc843b6d9b1..73ce1291a3c 100644 --- a/homeassistant/helpers/entity.py +++ b/homeassistant/helpers/entity.py @@ -337,7 +337,9 @@ class CachedProperties(type): Also invalidates the corresponding cached_property by calling delattr on it. """ - if getattr(o, private_attr_name, _SENTINEL) == val: + if ( + old_val := getattr(o, private_attr_name, _SENTINEL) + ) == val and type(old_val) is type(val): return setattr(o, private_attr_name, val) # Invalidate the cache of the cached property diff --git a/tests/helpers/test_entity.py b/tests/helpers/test_entity.py index bada0869ffd..2bf441f70fd 100644 --- a/tests/helpers/test_entity.py +++ b/tests/helpers/test_entity.py @@ -2314,7 +2314,12 @@ async def test_update_capabilities_too_often_cooldown( @pytest.mark.parametrize( - ("property", "default_value", "values"), [("attribution", None, ["abcd", "efgh"])] + ("property", "default_value", "values"), + [ + ("attribution", None, ["abcd", "efgh"]), + ("attribution", None, [True, 1]), + ("attribution", None, [1.0, 1]), + ], ) async def test_cached_entity_properties( hass: HomeAssistant, property: str, default_value: Any, values: Any @@ -2323,22 +2328,30 @@ async def test_cached_entity_properties( ent1 = entity.Entity() ent2 = entity.Entity() assert getattr(ent1, property) == default_value + assert type(getattr(ent1, property)) is type(default_value) assert getattr(ent2, property) == default_value + assert type(getattr(ent2, property)) is type(default_value) # Test set setattr(ent1, f"_attr_{property}", values[0]) assert getattr(ent1, property) == values[0] + assert type(getattr(ent1, property)) is type(values[0]) assert getattr(ent2, property) == default_value + assert type(getattr(ent2, property)) is type(default_value) # Test update setattr(ent1, f"_attr_{property}", values[1]) assert getattr(ent1, property) == values[1] + assert type(getattr(ent1, property)) is type(values[1]) assert getattr(ent2, property) == default_value + assert type(getattr(ent2, property)) is type(default_value) # Test delete delattr(ent1, f"_attr_{property}") assert getattr(ent1, property) == default_value + assert type(getattr(ent1, property)) is type(default_value) assert getattr(ent2, property) == default_value + assert type(getattr(ent2, property)) is type(default_value) async def test_cached_entity_property_delete_attr(hass: HomeAssistant) -> None: