首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在运行时动态更改实例的类?

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

Stack Overflow用户
提问于 2013-11-30 18:08:31
回答 2查看 176关注 0票数 0

我的一个同事向我演示了一些我觉得很有趣的代码:

代码语言:javascript
运行
复制
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__的赋值实际上只是改变了解析顺序……不是吗?

EN

回答 2

Stack Overflow用户

发布于 2013-11-30 18:15:27

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

票数 2
EN

Stack Overflow用户

发布于 2013-11-30 18:20:52

您在这里描述的是State或Strategy模式的“技术上可能的”实现。现在,虽然这是合法的python代码,但我强烈建议您不要使用它,除非作为最后的黑客手段,用于在您无法控制的部分代码中实例化的对象,即使这样也可能有更好的方法。

根据个人经验(我确实对Python最动态的特性进行了大量实验),坚持使用更传统的State和Strategy模式实现可以使代码更具可读性、可测试性和可维护性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20298961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档