2017-03-13 8 views
4

1は、次のコードのようなオブジェクトに新しい属性を追加するsetattrを使用することができますジュリアタイプに新しいフィールドを追加するには? Pythonで

class Foobar: 
    def __init__(self): 
     pass 

foobar = Foobar() 
setattr(foobar, 'foo', 123) 

print(foobar.foo) 

出力

123 

私はジュリアに知っsetfield!ありますが、それは追加することはできません。 Pythonでsetattrのような新しいフィールド。
私の質問は、複合型のオブジェクトに新しいフィールドを追加する方法がありますか?

+4

言語間の抽象化は常に1-1の方法でマッピングされるとは限りません。おそらくJulia Dictを使用し、新しいキー ':foo'を追加することで、あなたが必要とするダイナミズムが得られます。そうでない場合は、この機能の使用方法を明確にすることができますか? –

+0

物事が1-1の方法でマッピングされていないことが真実だと思われます。私が何を計画しているのかは、特定の条件が満たされている場合に属性を追加することです。後で存在するかどうかを確認できます。あなたが提案したことはそれを達成しているように見えますが、属性値を 'nothing'で定義することも考えています。その値が' nothing'か 'true'かどうか、' nothing'の他の値かどうか確認できます。どう思いますか? – Mis94

+4

あなたはそれが型安定であることを望んでいるでしょう。 'true/false'のいずれか、またはNullableを使用します。 –

答えて

10

複合型のオブジェクトに新しいフィールドを追加する方法はありますか?

いいえ。ジュリアは、この種のローカルな動的振る舞いなしに意図的に設計されています。フィールドを動的に追加したり削除したりする必要がある場合は、オブジェクトを別の構文の辞書として実際に使用しています。ジュリアでは、実際の辞書 - Dictまたは他の連想的なコレクション - をそのような用途に使用します。これは、Juliaの静的に定義された型よりもパフォーマンスは劣りますが、Pythonのような言語のオブジェクトよりもパフォーマンスは劣りませんが、それは動的なフィールドを持つオブジェクトの固有のコストです。ジュリアで。

関連する問題