В Python2 можно ли вызывать super в __init__ (+ другие методы) без параметров, чтобы метод super вызывался с теми же параметрами, что и данный метод? - PullRequest
1 голос
/ 23 марта 2019

Я программирую на Python 2.7.В других языках, таких как Ruby, в методе вызывается super, поэтому нет необходимости указывать параметры для вызова super - super.Один из них пропускает параметры в вызове super, и данный супер-метод вызывается с теми же параметрами, что и вызываемый метод.

Вот пример из вопроса StackOverflow Ключевое слово Super в Ruby :

class Foo
  def baz(str)
    p 'parent with ' + str
  end
end

class Bar < Foo
  def baz(str)
    super
    p 'child with ' + str
  end
end

Bar.new.baz('test') # => 'parent with test' \ 'child with test'

Как вы можете видеть, метод baz в class Bar содержит вызов super без каких-либо параметров и супер-метод baz в суперклассе.Foo неявно вызывается с тем же параметром (ами), что и метод baz в дочернем классе Bar

По разным причинам это очень удобно, и, хотя очевидно, что неявное поведение в программировании имеет свои недостатки, действительно полезно иметь в своем дочернем классе метод __init__, который выполняет такие вещи.дочерний класс и затем вызывает __init__ через super без необходимости знать параметры для __init__ в суперклассе.

Пожалуйста, помогите, любой совет будет полезен.Я искал ответ и не смог его найти.Я видел много вопросов и ответов о StackOverflow о super и super в __init__ и super в Python, но не знаю, есть ли синтаксис для вызова super, который не требует указания параметров и вызововон с теми же параметрами, что и данный метод, был вызван в дочернем классе.

То, что я пытаюсь сделать, очень похоже на raise в конструкции try, except, raise вPython:

try:
    linux_interaction()
except Exception as error:
    logger.critical(str(error))
    raise

В приведенном выше блоке я перехватываю все исключения, регистрирую любое исключение как критическое, а затем выкидываю его, просто вызвав raise, без параметров.Этот синтаксис вызова raise без параметров приводит к возникновению исключения, перехваченного в переменной с именем error, и сохраняет вызывающий стек / трассировку стека.Если кто-то вызвал raise error вместо просто raise, то трассировка стека, откуда возникла error, была бы потеряна.

Я пытаюсь сделать что-то подобное здесь, просто вызовите super и получитеметод super вызывается с теми же параметрами, что и данный метод, без необходимости знать, что это такое, и без необходимости указывать их - это было бы удобно, верно?

Кто-нибудь знает, возможно ли это, и если да, то чтосинтаксис в Python 2.7 будет?

...