Ответ 1
self.__class__
будет использовать тип подкласса, если вы вызываете этот метод из экземпляра подкласса.
Использование класса явно будет использовать любой класс, который вы явно указываете (естественно)
например:.
class Foo(object):
def create_new(self):
return self.__class__()
def create_new2(self):
return Foo()
class Bar(Foo):
pass
b = Bar()
c = b.create_new()
print type(c) # We got an instance of Bar
d = b.create_new2()
print type(d) # we got an instance of Foo
Конечно, этот пример довольно бесполезен, кроме как продемонстрировать мою точку зрения. Использование classmethod здесь было бы намного лучше.