gpt4 book ai didi

python - 在基类中使用派生类的属性

转载 作者:行者123 更新时间:2023-12-01 07:06:53 25 4
gpt4 key购买 nike

在我正在开发的项目中,我们有一个类层次结构,每个类都定义一个 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++ 虚拟方法分派(dispatch)来调用派生类中的方法。 Python 中可能有类似的东西吗?

最佳答案

回答我自己的问题(感谢评论者!)以下两种方法都有效:

return self.__class__.TEXT

这里,self.__class__ 指向 Derived1Derived2 类对象,它们可以访问 TEXT >.

return self.TEXT

由于属性解析算法会自动访问类属性,因此缩短了这一步骤。

关于python - 在基类中使用派生类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58410465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com