diff --git a/mypy/checker.py b/mypy/checker.py
--- a/mypy/checker.py
+++ b/mypy/checker.py
@@ -5151,6 +5151,7 @@ def _is_truthy_type(self, t: ProperType) -> bool:
                 and bool(t.type)
                 and not t.type.has_readable_member("__bool__")
                 and not t.type.has_readable_member("__len__")
+                and t.type.fullname != "builtins.object"
             )
             or isinstance(t, FunctionLike)
             or (

diff --git a/test-data/unit/check-errorcodes.test b/test-data/unit/check-errorcodes.test
--- a/test-data/unit/check-errorcodes.test
+++ b/test-data/unit/check-errorcodes.test
@@ -803,12 +803,15 @@ from typing_extensions import TypedDict
 
 Foo = TypedDict("Bar", {})  # E: First argument "Bar" to TypedDict() does not match variable name "Foo"  [name-match]
 [builtins fixtures/dict.pyi]
+
 [case testTruthyBool]
 # flags: --enable-error-code truthy-bool
-from typing import List, Union
+from typing import List, Union, Any
 
 class Foo:
     pass
+class Bar:
+    pass
 
 foo = Foo()
 if foo:  # E: "__main__.foo" has type "Foo" which does not implement __bool__ or __len__ so it could always be true in boolean context  [truthy-bool]
@@ -836,15 +839,30 @@ if good_union:
 if not good_union:
     pass
 
-bad_union: Union[Foo, object] = Foo()
-if bad_union:  # E: "__main__.bad_union" has type "Union[Foo, object]" of which no members implement __bool__ or __len__ so it could always be true in boolean context  [truthy-bool]
+bad_union: Union[Foo, Bar] = Foo()
+if bad_union:  # E: "__main__.bad_union" has type "Union[Foo, Bar]" of which no members implement __bool__ or __len__ so it could always be true in boolean context  [truthy-bool]
+    pass
+if not bad_union:  # E: "__main__.bad_union" has type "Union[Foo, Bar]" of which no members implement __bool__ or __len__ so it could always be true in boolean context  [truthy-bool]
+    pass
+
+# 'object' is special and is treated as potentially falsy
+obj: object = Foo()
+if obj:
     pass
-if not bad_union:  # E: "__main__.bad_union" has type "object" which does not implement __bool__ or __len__ so it could always be true in boolean context  [truthy-bool]
+if not obj:
     pass
 
 lst: List[int] = []
 if lst:
     pass
+
+a: Any
+if a:
+    pass
+
+any_or_object: Union[object, Any]
+if any_or_object:
+    pass
 [builtins fixtures/list.pyi]
 
 [case testTruthyFunctions]

Regression for truthy bool with getattr
The following code generates an error on latest master but no on latest release (with `--enable-error-codes=truthy-bool`):
```python
def f(obj: object) -> None:
    print("{}".format(
        getattr(type(obj), "__foo__", "") or "unknown"  # E: "builtins.getattr" returns "object" which does not implement __bool__ or __len__ so it could always be true in boolean context  [truthy-bool]
    ))

f("")
```

It's clearly a false positive, if your run the code you see that it prints `unknown`.



Using @hauntsaninja's mypy_primer, it pointed to #14178. 
```
$ cat test.py
# flags: --enable-error-code truthy-bool
def f(obj: object) -> None:
    print("{}".format(
        getattr(type(obj), "__foo__", "") or "unknown"  # E: "builtins.getattr" returns "object" which does not implement __bool__ or __len__ so it could always be true in boolean context  [truthy-bool]
    ))
$ python3 mypy_primer.py -p test.py --bisect --debug --old v0.991
...
4471c7e76f27ee51eb8d47a4803097ec15c62128 is the first bad commit
...
```

This is likely the same underlying issue as #14481.

@ilevkivskyi 


Here's a bit simpler example that reproduces the issue:
```py
def f(t: type[object]) -> None:
    o: object = getattr(t, "x", "") or ""
```
This looks different from #14481, as there are no TypedDicts involved here.
mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeSyntaxError2 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeIgnoreMultiple1 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeWarnUnusedIgnores4 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeSyntaxError3 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeNoAttribute mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeIgnoreMultiple2 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeWarnUnusedIgnores5 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeSyntaxErrorIgnoreNote mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeUndefinedName mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeWarnUnusedIgnores1 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeWarnUnusedIgnores6_NoDetailWhenSingleErrorCode mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeIgnore1 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeUnclassifiedError mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeWarnUnusedIgnores2 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeIgnore2 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeMissingWhenRequired mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeNoteHasNoCode mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeSyntaxError mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeMissingWholeFileIgnores mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeWarnUnusedIgnores3 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeMissingDoesntTrampleUnusedIgnoresWarning mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeUnionAttribute mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeBadIgnoreNoExtraComment mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeBadOverride mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeReturnValue mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeArgKindAndCount mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeMissingMultiple mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeMissingReturnValueInReturnStatement mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeArgType mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeFunctionHasNoAnnotation mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeIgnoreWithExtraSpace mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeAssignment mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeCallUntypedFunction mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeIgnoreAfterArgComment mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeInvalidType mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeIgnoreWithNote mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeMissingTypeArg mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeNeedTypeAnnotation mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeIndexing mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeBadIgnore mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeCannotDetermineType mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeMissingModule mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeOperators mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeInvalidTypeArg mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeRedundantCast mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeAlreadyDefined mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeFunctionDoesNotReturnValue mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeInvalidCommentSignature mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeListOrDictItem mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeMissingReturn mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeInstantiateAbstract mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeNonOverlappingEquality mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeNewTypeNotSubclassable mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeReturnValueNotExpected mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeTypedDict mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeReturnAny mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeOverloadVariant mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeProtocolProblemsIgnore mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeOverloadVariantIgnore mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeTypedDictNoteIgnore mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeNoneReturnNoteIgnore mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeFormatCall mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeAnyFromUnfollowedImport mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeVarianceNoteIgnore mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeDefinedHereNoteIgnore mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeIgnoreNamedDefinedNote mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeTypeIgnoreMisspelled1 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeAssignToMethod mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeTypeIgnoreMisspelled2 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeUnionNoteIgnore mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCode__exit__Return mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeOverloadedOperatorMethod mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeMultiLineBinaryOperatorOperand mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testNamedTupleNameMismatch mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testRedundantExpressions mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeSpecialArgTypeErrors mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testTypedDictNameMismatch mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testTruthyIterable mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testTruthyFunctions mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testNoOverloadImplementation mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testSliceInDict39 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testRecommendErrorCode mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testSliceInDict38 mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testSliceInCustomTensorType mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testShowErrorCodesInConfig mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testDedicatedErrorCodeForEmpty_no_empty mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testErrorCodeUnsafeSuper_no_empty mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testDedicatedErrorCodeTypeAbstract mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testUncheckedAnnotationCodeShown mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testNoteAboutChangedTypedDictErrorCode mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testUncheckedAnnotationSuppressed
mypy/test/testcheck.py::TypeCheckSuite::check-errorcodes.test::testTruthyBool