我是编写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”的属性或方法。
我无法扩展所有子类,因为子类太多。
我可以通过在模块下而不是在超类下定义函数来解决问题,但是我只是认为这种方式不像OO架构。
有更好的解决方案吗?还是我可以引用任何关键字或OO设计概念?
谢谢!
是的,只有一个关键字-“错误”。OO是模型,不应做您想做的事情。
如果您确实有充分的理由,则可以更简单地做到这一点:
import externalLib as myLib
def myNewMethod(self):
print(self.name)
myLib.Superclass.myNewMethod = myNewMethod
为什么您的代码不起作用?
当您定义从myLib.Superclass继承的Superclass时,它仅保留在此模块中。当您定义超类时,名称“超类”仅在全局范围内与新类绑定,但旧值没有改变,myLib / externalLib范围内的co超类保持不变。我可以看到,如果您使用Java或C ++之类的经典OO语言,您会感觉到它可能会起作用。
鲜为人知的事实-Java / C ++ OO模型并不是真正的面向对象。它确实具有这种印象,但是OOP模型实际上是在Smalltalk中实现的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句