I wonder if <code>*args</code> and maybe even <code>**dargs</code> wild-cards are needed here. It looks like you have the __slots__ and attributes fairly locked down here.  I think it's okay in the base-class since it's acting pseudo-dict-like.  But consider hiding that interface if it's not needed at this level.  Unless you're really trying to mirror a specialized <code>dict-like</code> type, then it's okay.  Otherwise, I think it's much cleaner to have the interface well defined above the base-class level, because other sub-classes that needs to specialize in a different way, can simply go back to the base-class.

FYI: The point of having __slots__ is to limit the set of keys & attribute names which can be used on instances.  By including <code>*args<code> <b>and</b> <code>**dargs</code> at this level along with additional named optional keyword parameters, the interface could be confusing.  It appears to take an undefined and  set of keys/values but reserve some special keywords at the same time defining them optional.  Having something both reserved or required and optional at the same time can be confusing.  

History: In general, using these special parameters is considered a "hack", so should be avoided unless absolutely necessary.  In the case of VirshBase, the interface is deliberately mirroring the <code>dict()</code> constructor (as <code>dict</code> is an ancestor of <code>PropCanBase</code>).  In fact, I should probably update the <code>Virsh</code> and all subclasses to remove the wild-cards since they're really not necessary.  They valid keys are well-established so it would be more clear to just spell them all out directly.