Access property by argument name (dot and bracket notation not equal) Here we see two ways to get a UI property stored in the Scene

&gt;&gt;&gt; print(scn.repGroups)
&lt;bpy_struct, RepGroup("")&gt;

&gt;&gt;&gt; print(scn['repGroups'])
&lt;bpy id prop: owner="SCScene", name="repGroups", address=0x0000003F0CE7D278&gt;


Typically I'm use to accessing a property like in JavaScript by passing an argument that is the string that holds the value that is the property like

def findIt(propName):
   scn = bpy.context.scene
   return scn[propName]


I would like to access the scene/scn property by name but get returned the item like you do in a normal reference (bpy_struct NOT bpy id prop). 
Please advise?
Defined properties use ID properties as storage

A defined property bpy.types.Scene.xxxx = bpy.props.BlahProperty(default=default)  is stored as an ID property scene["xxxx"] once it is set (non default). See get set example  

&gt;&gt;&gt; bpy.types.Scene.xxxx = bpy.props.IntProperty(default=11)
&gt;&gt;&gt; C.scene.xxxx
11

&gt;&gt;&gt; C.scene['xxxx']
Traceback (most recent call last):
  File "&lt;blender_console&gt;", line 1, in &lt;module&gt;
KeyError: 'bpy_struct[key]: key "xxxx" not found'

&gt;&gt;&gt; C.scene.xxxx = 12
&gt;&gt;&gt; C.scene['xxxx']
12


You see a struct printed for the property scene.xxxx if it is a pointer or collection, or an int for IntProperty, a str for StringProperty.

Henceforth, rather than scene[propname]  a more generic pythonic way would be using

getattr(scene, propname, None)


to return, if propname == "xxxx",  scene.xxxx if it exists, else None.

for the defined default

&gt;&gt;&gt; C.scene.bl_rna.properties['xxxx'].default
11