Вместо этого определите метод класса:
class Class1:
def __init__(self):
self.foo = 1
self.foo = 2
@classmethod
def new(cls):
return cls()
class Class2(Class1):
pass
Теперь, когда вы вызываете c2.new()
, среда выполнения увидит, что Class2
не имеет метода с именем new
, но Class1
делает. Кроме того, Class2
будет передано как неявный аргумент new
, а не Class1
.
Метод класса более уместен, чем метод экземпляра, поскольку у вас нет никакого другого интереса к объекту, вызывающему метод, кроме того, к какому классу он относится.