Вызовите метод родительского класса из дочернего класса в Python?

В качестве альтернативы вы также можете открыть намерение своего приложения в другом приложении:

Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

, где uri является отключением другого приложения

521
задан Filipp W. 17 September 2018 в 11:46
поделиться

4 ответа

Да, но только с классами нового стиля . Используйте функцию super () :

class Foo(Bar):
    def baz(self, arg):
        return super(Foo, self).baz(arg)

Для Python 3.x вы можете использовать:

class Foo(Bar):
    def baz(self, arg):
        return super().baz(arg)
658
ответ дан 22 November 2019 в 22:18
поделиться
ImmediateParentClass.frotz(self)

будет хорошо, независимо от того, определил ли непосредственный родительский класс frotz или унаследовал его. super необходим только для правильной поддержки множественного наследования (и тогда он работает только в том случае, если каждый класс использует его правильно). В общем, AnyClass.wh независимо будет искать независимо от в предках AnyClass , если AnyClass не определяет / не переопределяет его , и это верно для «дочернего класса, вызывающего родительский метод», как и для любого другого случая!

79
ответ дан 22 November 2019 в 22:18
поделиться

В Python также есть super (). Это немного шатко из-за классов старого и нового стиля Python, но довольно часто используется, например, в конструкторах:

class Foo(Bar):
    def __init__(self):
        super(Foo, self).__init__()
        self.baz = 5
13
ответ дан 22 November 2019 в 22:18
поделиться

Python также имеет super в качестве well:

super (type [, object-or-type])

Возвращает прокси-объект, который делегирует вызовы метода родительскому или родственному классу типа. Это полезно для доступа к унаследованным методам, которые были переопределены в классе. Порядок поиска такой же, как в getattr (), за исключением того, что сам тип пропускается.

Пример:

class A(object):     # deriving from 'object' declares A as a 'new-style-class'
    def foo(self):
        print "foo"

class B(A):
    def foo(self):
        super(B, self).foo()   # calls 'A.foo()'

myB = B()
myB.foo()
132
ответ дан 22 November 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: