【发布时间】:2012-10-28 03:44:36
【问题描述】:
假设我有一个类,它有许多子类。
我可以实例化这个类。然后我可以将其__class__ 属性设置为子类之一。我已经有效地将类类型更改为其子类的类型,在一个活动对象上。我可以调用它的方法来调用这些方法的子类版本。
那么,这样做有多危险?看起来很奇怪,但这样做是不是错误?尽管能够在运行时更改类型,但这是应该完全避免的语言特性吗?为什么或为什么不?
(根据回复,我将发布一个更具体的问题,说明我想做什么,以及是否有更好的选择)。
【问题讨论】:
-
我会说这是错误的,主要是因为没有客户端代码会期望对象的类型可以随机更改。当然,如果您将类型更改为与前一种兼容的类型,则不会引入错误。但是可能有更好的面向对象的方法。 (委派策略等)所以我的直觉是:危险?不,令人困惑?是的。有用到足以引起混乱吗?不太可能。
-
我们通常认为一个实例有固定的方法和可变的数据。我很想看到一个具有固定数据和可变方法的用例。我觉得会很有趣!请向我们展示您的用例。
-
使用工厂设计模式的设计看起来很糟糕......
-
请发表具体问题。很难想象这将是最佳解决方案的情况——但仅仅因为我无法想象一个并不意味着它不存在。 :)
-
@unutbu 函数可以是数据,因此“变量方法”更适合通过保存函数对象的属性来建模。
标签: python python-3.x python-2.x