That's not my X, its Y is too Z

Python 3, 149 bytes

lambda a,*l:shuffle(a)or["That's "+s%(a[0],*map(choice,l))for s in["not my %s, its %s is too %s."]*5+["my %s! Its %s is so %s."]]
from random import*

Try it online!

-9 bytes thanks to movatica

Charcoal, 72 bytes

≔‽θθF⁵«That's not my θ, its ‽η is too ‽ζ.⸿»That's my θ! Its ‽η is so ‽ζ.

Try it online! Link is to verbose version of code. Expects the arrays of things, parts and properties to be in the variables θ, η and ζ, which is most easily arranged by providing them in the input rather than the header. Explanation:


Pick a random thing.

F⁵«That's not my θ, its ‽η is too ‽ζ.⸿»

Print five negative sentences.

That's my θ! Its ‽η is so ‽ζ.

Print the positive sentence.

Japt v2.0a0 -R, 73 bytes

6Æ`Tt's {`not `pT=Y<5}my {+`!,`gT} {73dT*H}ts {Vö}  {`tÑ?`ë2!T} {Wö}.

Takes the three lists as U, V, and W. Those are the default input variables anyways, so just put the three lists in the input section.

Try it

ö                         Saves the random object in variable U
6Æ                        Range [0..6), and map each to the following string
`That's                   The string "That's " plus
{`not `pT=Y<5}            "not " if the index is less than 5 (and store that in variable T), else ""
my                        Literal "my " plus
{+`!,`gT}                 U plus ',' if T, else '!'
{73dT*H}ts                "its " if T, else "Its "
{Vö}                      Random item from V
{`tsooo`ë2!T}             "too" if T, else "so"
{Wö}.                     Random item from V, plus a period


Code Golf