我是一个新手在编写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
结果:“Subclass”没有名为“myNewMethod”的属性或方法。在
扩展所有的子类对我来说是不可能的,因为也有 许多子类。
我可以通过定义函数来解决这个问题 在我的模块下而不是超类下,但我就是这么想的 不像OO架构。
有更好的解决办法吗?或任何关键字或OO设计概念我可以参考?在
谢谢!在
是的,有一个关键词——“错误”。OO是模型,你想做的不应该做。在
如果你有充分的理由,你可以做得更简单:
为什么你的代码没用?在
定义继承自的超类时myLib超类,它只停留在这个模块中。当您定义超类时,名称“Superclass”只在全局范围内与新类绑定,但旧值不变,myLib/externalLib作用域中的co超类保持不变。我可以看到,如果你使用java或C++之类的经典OO语言,你会发现它可能起作用。在
几乎不知道的事实——爪哇/C++ + OO模型不是真正面向对象的。它确实如此,但OOP模型实际上是在Smalltalk中实现的。在您正在查找monkeypatch原始类。因为方法只是类的属性,所以可以添加更多:
相关问题 更多 >
编程相关推荐