What are the difference? Both seem to work completely fine in my script and seem to be interchangeable.
I’m using it in conjunction with bpy_extras.io_utils.ExportHelper. I get the output file/directory selected by the user and have my script call a method in another file with that info, passing “self” as the argument from the ExportHelper (I keep Blender GUI-related code isolated from my various scripts). The actual script then access the ExportHelper info via self.filepath / self.properties.filepath.
I like to keep code as short and readable as much as possible (i.e., self.filepath), but not sure if there’s any functional differences between the above two approaches.