Implementing Abstract class
How do you tell what the student type is, without erroring on both International and Domestic?

With your current code, you'd have to do something like:

if hasattr(student, 'student_type'):
    student_type = student.student_type()
else:
    student_type = None


What makes this worse, is you assume None to be International.
Why can't Domestic students have international_documents?

In your requirements you state:


  
  Domestic students don't require documentation
  International student do require documentation (passports, etc..)
  

Why should these be separate classes?
Your name mangled variables make your code longer, and generally more horrible to read.
Instead you could make them just normal properties.

However, since they are unsetable, you may want to use a namedtuple instead.


And so I'd use something like:

from collections import namedtuple
from Enum import enum

class StudentType(Enum):
    INTERNATIONAL = 'international'
    DOMESTIC = 'domestic'

Student = namedtuple('Student', 'id first_name last_name type documents')

s1 = Student(0, 'John', 'Doe', StudentType.INTERNATIONAL, [...])
s2 = Student(1, 'Eva', 'Smith', StudentType.DOMESTIC, [])