Я программирую на 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 будет?