扩展超类,调用 Python 中的子类



我是编写OO程序的新手,我找不到任何好的解决方案来解决我面临的问题。有人可以帮忙吗?

正在采购一些我无法自由修改它的模块,我想在超类上添加一个方法,以便我可以调用子类的实例。所以在我的模块中:

import externalLib as myLib
class Superclass(myLib.Superclass):
    def myNewMethod(self):
        print(self.name)   # Print a member variable
def __main__():
    obj = myLib.Subclass(args)
    obj.myNewMethod()    # Expect prints the same member variable in subclass

结果:"子类"没有名为"myNewMethod"的属性或方法。

  1. 扩展所有子类对我来说是不可能的,因为也有许多子类。

  2. 我可以通过定义函数来解决问题在我的模块下而不是超类下,但我只是这样想不像 OO 架构。

有没有更好的解决方案?或者我可以参考任何关键字或OO设计概念?

谢谢!

是的,有一个关键字 - "错误"。OO是模型,你想做的事情不应该做。

如果你有很好的理由,你可以做得更简单:

import externalLib as myLib
def myNewMethod(self):
    print(self.name)
myLib.Superclass.myNewMethod = myNewMethod

为什么你的代码不起作用?

当你定义从myLib.Superclass继承的超类时,它只保留在这个模块中。当你定义你的超类时,名称"超类"只在全局范围内与你的新类绑定,但旧值没有改变,myLib/externalLib 作用域中的 co 超类保持不变。我可以看到你是如何得到它的印象,如果你使用经典的OO语言,如Java或C++。

鲜为人知的事实 - Java/C++ OO模型并不是真正面向对象的。它确实有这样的印象,但OOP模型确实在Smalltalk中实现。

你正在寻找原始类的猴子补丁。由于方法只是类的属性,因此始终可以添加更多属性:

import externalLib as myLib
def myNewMethod(self):
    print(self.name)
myLib.Superclas.myNewMethod = myNewMethod

最新更新