В Python 3.0 +: Я бы пошел с параметром к конструктору базового класса, как у вас во втором примере.Поскольку это вынуждает классы, производные от Base, предоставлять необходимое свойство пути, которое документирует тот факт, что у класса есть такое свойство, и что производные классы обязаны его предоставлять.Без этого вы бы полагались на то, что это указано (и прочитано) где-то в строках документации вашего класса, хотя это, безусловно, помогает также указать в строке документации, что означает конкретное свойство.
В Python 2.6+: Я бы не использовал ни один из вышеперечисленных;вместо этого я бы использовал:
class Base(object):
def __init__(self,path):
self.path=path;
class Sub(Base):
def __init__(self):
Base.__init__(self,"something/")
Другими словами, мне потребовался бы такой параметр в конструкторе базового класса, потому что он документирует тот факт, что все такие типы будут иметь / использовать / нуждаться в этом конкретном параметре и чтопараметр должен быть предоставлен.Однако я бы не использовал super (), так как super в Python несколько хрупок и опасен, и я бы также сделал Base классом нового стиля , наследуя от объекта (или от некоторыхдругой новый стиль) класс.