невиртуальная интерфейсная идиома больше чем для двух уровней наследования?

Когда вы используете df.replace(), он создает новый временный объект, но не изменяет ваш. Вы можете использовать одну из двух следующих строк для изменения df:

df = df.replace('white', np.nan)
df.replace('white', np.nan, inplace = True)
5
задан manlio 27 March 2016 в 21:27
поделиться

2 ответа

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

Это совершенно законно:


class Parent
{
public:
  int foo() {return bar();} // the non-virtual public interface
private
  virtual int bar();
};

class Child : public Parent
{
private:
  virtual int bar();  // overrides Parent::bar()
};

class Grandchild : public Child
{
private:
  virtual int bar(); // overrides Child::bar();
};
5
ответ дан 14 December 2019 в 13:51
поделиться

Производный класс может решить для себя:

Можно просто переопределить метод полностью путем реализации виртуальной функции. Можно увеличить метод путем вызывания 'средней' функции классов в какой-то момент в методе производного класса.

Если это не то, что Вы хотите, необходимо настроить его явно в 'среднем' классе. Я не был бы все же. Если Вы требуете этого, это, вероятно, означает, что Вы не дали базовому классу достаточно точек настройки.

1
ответ дан 14 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

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