Since it's just retrieving the first one it finds, you can make this cleaner by using existing properties interface, and ``forbidden`` parameter to make it read-only.  Then you don't need any custom methods at all.  Just add a ``first_mac`` property name in ``__slots__`` then stick this into ``__init__``:

        accessors.XMLElementText(property_name="first_mac",
                                 libvirtxml=self,
                                 forbidden=['set', 'del'],
                                 parent_xpath='/devices/interface',
                                 tag_name='mac')

Though I don't see any reason to forbid the ``set`` or ``del`` operations, they could come in handy sometime.  If so, just leave out the ``forbidden`` parameter and it will default to ``None``.

Note: Because this relies on using our broken XPath implementation, it will only ever be possible to access the first-found interface element.  However, if more complicated operations are needed, there's always the VMXML.devices interface also.