Having both accessor methods _and_ storing dictionary value for <code>sysfs_sub_path</code> can be problematic (from experience trying to do it myself).  It's best to do just one or the other.  Also, since the value is dependent on other properties, it will be easy to hit secondary Key/AttributeErrors (since you haven't set them inside <code>__init__()</code> before <code>super()</code>).

Does all this make sense?  I know it may seem less-useful, but boring stuff doesn't break so easy :D   In my experience, it's best to keep acessor-methods doing very simple things, and only do only one thing.  More complicated operations tend to bring hidden side-effects which are hard to deal with later.

Maybe instead, just have a <code>@staticmethod make_sysfs_sub_path(bus, device, slot, function)</code> (and remove as a property from __slots__)?