13

このような質問はありますが、まったく同じものはなく、完全に満足のいく答えは見つかりませんでした。

私はエージェントベースの生物学的モデルをやっています。細胞タイプ A のクラスとタイプ B のクラスがあるとします。それらは時計に従って老化します。A型の細胞がある年齢になると、B型の細胞に変化するとします。

細胞の在庫があります。新しい B セルを作成してインベントリに追加し、A セルをインベントリに残したくないだけです。

これは機能しているように見えますが、安全ですか?

class B(object):
    pass

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

または、より良いアプローチはありますか?

4

3 に答える 3

7

通訳者にとっては安全かもしれませんが、何が起こっているのかを理解しようとする人にとっては安全ではありません。

生物学的細胞よりもオブジェクト設計へのより自然なマッピングを見つけるのは難しく、自然にそこにあるものを破棄しようとしています. 細胞には年齢があり、さまざまなメカニズムが年齢の関数としてオンとオフを切り替えます。世界では、骨芽細胞が存在しなくなって骨細胞が代わりになるのではなく、細胞はその「アイデンティティ」を保持しますが、年齢などの状態値に応じて異なる動作をします.

そのようなモデルをコーディングする場合、オブジェクト モデルにそのような考慮事項を確実に取り入れます。

于 2012-07-11T22:09:21.390 に答える
3

私は何年も前にパーサーの作業中にそれを試しました。当時私が望んでいたことをしているように見えたので、言語の観点からは十分に安全でしたが、今は年をとって賢くなりました。他の誰かが維持しなければならないコードには使用しないと思います。その観点から非常に「安全」だとは思わない

于 2012-07-11T22:48:30.347 に答える
0

これは代表団にとって良い場所かもしれません。内部的には、必要な実際のオブジェクト タイプを保持し、必要に応じて切り替えます。

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()
于 2012-07-11T22:21:59.697 に答える