de-signerПервый вариант используют чтобы при наследовании создавался объект того-же класса, что и у исходного объекта.
2. Пронумерованые строки: в оригинале 1 , почему нельзя написать 2
>>> class A:
... def copy( self ):
... return self.__class__()
... def copy2( self ):
... return A()
...
>>> class B( A ):
... pass
...
>>> b = B()
>>> b.copy()
<__main__.B instance at 0x01C7AB70>
>>> b.copy2()
<__main__.A instance at 0x01C851C0>
>>>