Как назвать свойство базового класса, если это свойство перезаписывается в производном классе?

var waitTillSomethingHappens = function(){  
    if(somethingHappened == 1)  
    {  
        alert('Something Happened get out of sleep');  
    }
    else
    {  
    setTimeout(waitTillSomethingHappens,1000);  
    }  
};
81
задан spinkus 18 May 2017 в 13:46
поделиться

4 ответа

Вы могли подумать, что могли бы вызвать функция базового класса, которая вызывается свойством:

class FooBar(Foo):

    @property
    def bar(self):
        # return the same value
        # as in the base class
        return Foo.bar(self)

Хотя это наиболее очевидная вещь, которую можно попробовать, я думаю - она не работает, потому что bar - это свойство, а не вызываемое.

Но свойство - это просто объект с помощью метода получения, чтобы найти соответствующий атрибут:

class FooBar(Foo):

    @property
    def bar(self):
        # return the same value
        # as in the base class
        return Foo.bar.fget(self)
92
ответ дан 24 November 2019 в 09:37
поделиться

Super должен помочь:

return super().bar

В Python 2.x вам нужно использовать более подробный синтаксис:

return super(FooBar, self).bar
46
ответ дан 24 November 2019 в 09:37
поделиться

try

@property
def bar:
    return super(FooBar, self).bar

Хотя я не уверен, поддерживает ли python вызов свойства базового класса. Свойство на самом деле является вызываемым объектом, который настраивается с указанной функцией, а затем заменяет это имя в классе. Это может легко означать, что нет доступной суперфункции.

Вы всегда можете переключить свой синтаксис на использование функции property ():

-2
ответ дан 24 November 2019 в 09:37
поделиться

try

@property
def bar:
    return super(FooBar, self).bar

Хотя я не уверен, поддерживает ли python вызов свойства базового класса. Свойство на самом деле является вызываемым объектом, который настраивается с указанной функцией, а затем заменяет это имя в классе. Это легко может означать, что нет доступной суперфункции.

Вы всегда можете переключить свой синтаксис на использование функции property ():

class Foo(object):

    def _getbar(self):
        return 5

    def _setbar(self, a):
        print a

    bar = property(_getbar, _setbar)

class FooBar(Foo):

    def _getbar(self):
        # return the same value
        # as in the base class
        return super(FooBar, self)._getbar()

    def bar(self, c):
        super(FooBar, self)._setbar(c)
        print "Something else"

    bar = property(_getbar, _setbar)

fb = FooBar()
fb.bar = 7
4
ответ дан 24 November 2019 в 09:37
поделиться
Другие вопросы по тегам:

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