Python 在运行时动态更改实例的类?

Python 在运行时动态更改实例的类?,python,Python,我的一位同事向我演示了一些我觉得非常有趣的代码: class A(object): def evolve(self): if self.foo > 10: self.__class__ = B class B(A): def bar(self): print "I'm a B" 。。。这就是它的要点。其思想是在处理其他计算之后,在运行时“专门化”一个实例。我一直在考虑它,即使它感觉不对(特别是对\uuuuu cl

我的一位同事向我演示了一些我觉得非常有趣的代码:

class A(object):
    def evolve(self):
        if self.foo > 10:
             self.__class__ = B

class B(A):
    def bar(self):
        print "I'm a B"
。。。这就是它的要点。其思想是在处理其他计算之后,在运行时“专门化”一个实例。我一直在考虑它,即使它感觉不对(特别是对
\uuuuu class\uuuu
的赋值),只要正确考虑类型层次结构,我也看不出它有什么问题

有没有一种方法可以在Python中实现这一点,而不必指定给
\uuuuu class\uuuuuu


同样,我也不认为这有什么错,因为分配给
\uuuuuu class\uuuuuuu
只会有效地改变分辨率顺序。。。没有?

做这类事情的经典方法是。创建一组类似的类,然后主类充当门面,其方法将操作委托给所包含的类/对象。

执行此类操作的经典方法是。创建一组类似的类,然后主类充当门面,其方法将操作委托给所包含的类/对象。

执行此类操作的经典方法是。创建一组类似的类,然后主类充当门面,其方法将操作委托给所包含的类/对象。

执行此类操作的经典方法是。创建一组类似的类,然后主类充当门面,其方法将操作委托给所包含的类/对象。

这里描述的是状态或策略模式的“技术上可能”实现。现在,虽然这是合法的python代码,但我强烈建议不要使用它,除非作为在代码部分实例化对象的最后手段,您无法控制这些对象,甚至还有更好的方法


根据个人经验(我也用Python最具动态性的特性做了很多实验),坚持状态和策略模式的更常规的实现会使代码更具可读性、可测试性和可维护性

您在这里描述的是状态或策略模式的“技术上可能”实现。现在,虽然这是合法的python代码,但我强烈建议不要使用它,除非作为在代码部分实例化对象的最后手段,您无法控制这些对象,甚至还有更好的方法


根据个人经验(我也用Python最具动态性的特性做了很多实验),坚持状态和策略模式的更常规的实现会使代码更具可读性、可测试性和可维护性

您在这里描述的是状态或策略模式的“技术上可能”实现。现在,虽然这是合法的python代码,但我强烈建议不要使用它,除非作为在代码部分实例化对象的最后手段,您无法控制这些对象,甚至还有更好的方法


根据个人经验(我也用Python最具动态性的特性做了很多实验),坚持状态和策略模式的更常规的实现会使代码更具可读性、可测试性和可维护性

您在这里描述的是状态或策略模式的“技术上可能”实现。现在,虽然这是合法的python代码,但我强烈建议不要使用它,除非作为在代码部分实例化对象的最后手段,您无法控制这些对象,甚至还有更好的方法


根据个人经验(我也用Python最具动态性的特性做了很多实验),坚持状态和策略模式的更常规的实现会使代码更具可读性、可测试性和可维护性

我已经和我的同事讨论过了。问题是没有事先知道完整的接口。这些项目就像一个巨大的专有接口的抽象!把它全部抽象出来是不可行的。我们只需要一分钟。我只是转达一下信息。我没有机会充分分析这个问题……我已经和我的同事讨论了这个问题。问题是没有事先知道完整的接口。这些项目就像一个巨大的专有接口的抽象!把它全部抽象出来是不可行的。我们只需要一分钟。我只是转达一下信息。我没有机会充分分析这个问题……我已经和我的同事讨论了这个问题。问题是没有事先知道完整的接口。这些项目就像一个巨大的专有接口的抽象!把它全部抽象出来是不可行的。我们只需要一分钟。我只是转达一下信息。我没有机会充分分析这个问题……我已经和我的同事讨论了这个问题。问题是没有事先知道完整的接口。这些项目就像一个巨大的专有接口的抽象!把它全部抽象出来是不可行的。我们只需要一分钟。我只是转达一下信息。我没有机会充分分析这个问题。。。