我的一个同事向我演示了一些我觉得很有趣的代码:
class A(object):
def evolve(self):
if self.foo > 10:
self.__class__ = B
class B(A):
def bar(self):
print "I'm a B"..。这基本上就是它的要点。其思想是在处理完其他计算后,在运行时“专门化”一个实例。我一直在思考这个问题,即使它感觉是错误的(特别是对__class__的赋值),但只要适当地考虑了类型层次结构,我就看不出有什么问题。
有没有一种在Python语言中不用赋值给__class__就能做到这一点的方法
同样,我不认为这有太大的问题,因为对__class__的赋值实际上只是改变了解析顺序……不是吗?
发布于 2013-11-30 18:15:27
做这类事情的经典方法是。创建一组类似的类,然后主类充当外观,其方法将操作委托给所包含的类/对象。
发布于 2013-11-30 18:20:52
您在这里描述的是State或Strategy模式的“技术上可能的”实现。现在,虽然这是合法的python代码,但我强烈建议您不要使用它,除非作为最后的黑客手段,用于在您无法控制的部分代码中实例化的对象,即使这样也可能有更好的方法。
根据个人经验(我确实对Python最动态的特性进行了大量实验),坚持使用更传统的State和Strategy模式实现可以使代码更具可读性、可测试性和可维护性。
https://stackoverflow.com/questions/20298961
复制相似问题