Python 在基类中使用派生类的属性
在我正在进行的项目中,我们有一个类的层次结构,每个类定义一个Python 在基类中使用派生类的属性,python,inheritance,Python,Inheritance,在我正在进行的项目中,我们有一个类的层次结构,每个类定义一个get\u 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):
get\u 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中是否可能有类似的功能?
回答我自己的问题(感谢评论!)以下两种方法都有效:return self.__class__.TEXT
这里,self.\uuuuu class\uuuuu
指向Derived1
或Derived2
类对象,这些对象可以访问文本
return self.TEXT
由于属性解析算法自动访问类属性,因此缩短了这一步。..self.TEXT
?正如@jornsharpe所说,self.TEXT
@jornsharpe-是的,很简单!抓住了C++模型,看不到明显的答案。