> + не является объектом
Совершенно верно. Но только потому что с точки зрения интерпритатора никакого “+” нет, а есть метод __add__ . Например “1” + “1” интерпритатор преобразует в “1”.__add__(“1”) и это выражние полностью соответствует твоим требованиям:
> 2) каждый объект является экземпляром определенного класса;
“1” это экземпляр класса str
>>> type("1")
<type 'str'>
> 3) классы образуют иерархии.
Иерархия прослеживается:
>>> str.__mro__
(<type 'str'>, <type 'basestring'>, <type 'object'>)
> 1) объектно-ориентированное программирование использует в качестве основных логических конструктивных элементов объекты, а не алгоритмы;
Все действия производятся над объектами, причём алгоритм конкатенации находится ни где-то снаружи, а в нутри объекта.
По этому можно сказать что для интепритатора любая программа объектно-ориентированная.