首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中更改基类安全吗?

在python中更改基类安全吗?
EN

Stack Overflow用户
提问于 2012-07-12 05:55:58
回答 3查看 190关注 0票数 13

像这样的问题是存在的,但没有一个完全像这样,我也没有找到完全令人满意的答案。

我正在做一个基于智能体的生物模型。假设我有一个A类型的细胞和一个B类型的细胞,它们的年龄根据时钟而变化。假设当类型A的细胞达到一定年龄时,它会变成类型B的细胞。

我有一份细胞清单。我不想只是创建新的B细胞,然后将它们添加到清单中,然后将A细胞留在清单中。

这似乎是可行的,但它安全吗?

代码语言:javascript
复制
class B(object):
    pass

class A(object):
    def changeToB(self):
        self.__class__ = B

或者,有没有更好的方法?

EN

回答 3

Stack Overflow用户

发布于 2012-07-12 06:09:21

虽然这对解释器来说可能是安全的,但对于试图理解所发生的事情的人来说,这肯定是不安全的。

很难找到比生物细胞更自然的对象设计映射,而你正试图抛弃自然存在的东西。细胞年龄有一个年龄(),各种机制随着年龄的变化而开启和关闭。在世界上,成骨细胞不会突然消失,取而代之的是成骨细胞,而是细胞保持其“身份”,但根据年龄等状态值的不同而表现不同。

如果我在编写这样的模型,我肯定会在对象模型中考虑到这一点。

票数 7
EN

Stack Overflow用户

发布于 2012-07-12 06:48:30

我在多年前开发解析器的时候就尝试过了。它似乎做了我当时想要做的事情,所以从语言的角度来看是足够安全的,但现在我年龄更大了,也更聪明了,我不认为我会用它来编写其他人可能必须维护的代码-我不认为从那个角度看它是非常“安全”的

票数 3
EN

Stack Overflow用户

发布于 2012-07-12 06:22:00

这可能是一个委托的好地方。在内部,您可以保留所需的实际对象类型,并在适当的时候将其切换出来。

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11442100

复制
相关文章

相似问题

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