В проекте, над которым я работаю, у нас есть иерархия классов, каждый класс которой определяет метод get_text()
.
class Base:
def get_text(self):
raise NotImplementedError
class Derived1(Base):
def get_text(self):
return "Text from Derived1"
class Derived2(Base):
def get_text(self):
return "Text from Derived2"
obj1 = Derived1()
print(obj1.get_text())
==> 'Text from Derived1'
obj2 = Derived2()
print(obj2.get_text())
==> 'Text from Derived2'
Таким образом, программист может вызвать obj.get_text()
и получитьтекст из класса obj
указывает на
Теперь я хочу изменить метод, чтобы он стал просто атрибутом (называемым TEXT
). Я хочу сохранить оригинальные методы обратной совместимости. Есть ли способ сделать это только в базовом классе?
class Base:
def get_text(self):
"""
Keep backward compatibility.
"""
return TEXT # What should be here?
class Derived1(Base):
TEXT = "Text from Derived1"
class Derived2(Base):
TEXT = "Text from Derived2"
obj1 = Derived1()
print(obj1.TEXT)
# Non-refactored code
obj2 = Derived2()
print(obj2.get_text())
==> NameError: name 'TEXT' is not defined
Исходя из C ++, я привык иметь указатель на базовый класс, вызывать метод из производного класса с помощью диспетчеризации виртуальных методов C ++,Возможно ли что-то подобное в Python?