繁体   English   中英

在基础 class 中使用派生的 class 的属性

[英]Using attributes from the derived class in the base class

在我正在处理的项目中,我们有一个类层次结构,每个 class 定义一个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指向的 class 中获取文本。

现在我想将该方法重构为一个属性(称为TEXT )。 不过,我想保留原始方法以实现向后兼容性。 有没有办法只在基础 class 中做到这一点?

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++,我习惯于使用指向基础 class 的指针调用派生的 class 使用 ZF6F87C9FDCF8871C2F3 虚拟方法调度的方法。 Python 中是否有类似的可能?

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

return self.__class__.TEXT

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

return self.TEXT

使这一步骤更短,因为属性解析算法会自动访问 class 属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM