How to check if a PointerProperty has a value?
Value is None if not set.
The value of a pointer property pointing to an ID object, ie one that  is not defined with a type derived from a PropertyGroup  is None if not assigned.
&gt;&gt;&gt; bpy.types.Object.foo = bpy.props.PointerProperty(type=bpy.types.Object)
&gt;&gt;&gt; issubclass(bpy.types.Object, bpy.types.ID)
True

&gt;&gt;&gt; C.object
bpy.data.objects['Text']

&gt;&gt;&gt; C.object.bl_rna.properties['foo'].fixed_type
&lt;bpy_struct, Struct(&quot;Object&quot;) at 0x5b41620&gt;

&gt;&gt;&gt; C.object.foo is None
True

&gt;&gt;&gt; C.object.foo = C.object
&gt;&gt;&gt; C.object.foo
bpy.data.objects['Text']