像这样的问题是存在的,但没有一个完全像这样,我也没有找到完全令人满意的答案。
我正在做一个基于智能体的生物模型。假设我有一个A类型的细胞和一个B类型的细胞,它们的年龄根据时钟而变化。假设当类型A的细胞达到一定年龄时,它会变成类型B的细胞。
我有一份细胞清单。我不想只是创建新的B细胞,然后将它们添加到清单中,然后将A细胞留在清单中。
这似乎是可行的,但它安全吗?
class B(object):
pass
class A(object):
def changeToB(self):
self.__class__ = B或者,有没有更好的方法?
发布于 2012-07-12 06:09:21
虽然这对解释器来说可能是安全的,但对于试图理解所发生的事情的人来说,这肯定是不安全的。
很难找到比生物细胞更自然的对象设计映射,而你正试图抛弃自然存在的东西。细胞年龄有一个年龄(),各种机制随着年龄的变化而开启和关闭。在世界上,成骨细胞不会突然消失,取而代之的是成骨细胞,而是细胞保持其“身份”,但根据年龄等状态值的不同而表现不同。
如果我在编写这样的模型,我肯定会在对象模型中考虑到这一点。
发布于 2012-07-12 06:48:30
我在多年前开发解析器的时候就尝试过了。它似乎做了我当时想要做的事情,所以从语言的角度来看是足够安全的,但现在我年龄更大了,也更聪明了,我不认为我会用它来编写其他人可能必须维护的代码-我不认为从那个角度看它是非常“安全”的
发布于 2012-07-12 06:22:00
这可能是一个委托的好地方。在内部,您可以保留所需的实际对象类型,并在适当的时候将其切换出来。
class B(object):
def do_something(self):
print "I'm a B"
class A(object):
def do_something(self):
print "I'm an A"
class AorB(object):
def __init__(self):
self.identity = A()
def changeToB(self):
self.identity = B()
def do_something(self):
self.identity.do_something()https://stackoverflow.com/questions/11442100
复制相似问题