JavaScriptでは次のようになります。
var newObject = { 'propertyName' : 'propertyValue' };
Pythonでそれを行う方法?
obj = type('obj', (object,), {'propertyName' : 'propertyValue'})
2種類のtype
関数で使用 があります。
ピーターの答え
obj = lambda: None
obj.propertyName = 'propertyValue'
Python 3.3はその正確な目的のために SimpleNamespace
クラスを追加しました:
>>> from types import SimpleNamespace
>>> obj = SimpleNamespace(propertyName='propertyValue')
>>> obj
namespace(propertyName='propertyValue')
>>> obj.propertyName
'propertyValue'
オブジェクトを構築するための適切なコンストラクターに加えて、SimpleNamespace
は__repr__
および__eq__
( .4に記載 )を定義して期待どおりに動作します。
組み込みの方法があるかどうかはわかりませんが、次のようなクラスをいつでも定義できます。
class InlineClass(object):
def __init__(self, dict):
self.__dict__ = dict
obj = InlineClass({'propertyName' : 'propertyValue'})
私は Smashery's のアイデアが好きですが、Pythonは自分でクラスを変更できるコンテンツのようです:
>>> class Inline(object):
... pass
...
>>> obj = Inline()
>>> obj.test = 1
>>> obj.test
1
>>>
Python 2.5の場合、私にとっては問題ありません。object
から派生したクラスに対してこれを行う必要があることに注意してください。行をobj = object
に変更すると機能しません。 。
Python=では、オプションの引数を使用してインスタンスを設定できる__init__()
関数を使用してクラスを宣言することは簡単です。引数を指定しない場合、空のインスタンスを取得し、引数の一部またはすべてを指定した場合は、インスタンスを初期化します。
私はそれを説明しました ここ (これまでの私の最高評価の回答)なので、説明を再入力しません。ただし、ご不明な点がございましたら、お気軽にお問い合わせください。
クラスがそれほど重要ではないジェネリックオブジェクトが必要な場合は、次のようにできます。
_class Generic(object):
pass
x = Generic()
x.foo = 1
x.bar = 2
x.baz = 3
_
明らかな拡張は、何か便利なものを出力する__str__()
関数を追加することです。
このトリックは、より便利な辞書が必要な場合に便利です。 _x.foo
_よりも_x["foo"]
_を入力する方が簡単です。
別の実行可能なオプションは namedtuple を使用することです:
from collections import namedtuple
message = namedtuple('Message', ['propertyName'], verbose=True)
messages = [
message('propertyValueOne'),
message('propertyValueTwo')
]
class test:
def __setattr__(self,key,value):
return value
myObj = test()
myObj.mykey = 'abc' # set your property and value
SilentGhostは良い答えを出しましたが、彼のコードは実際にメタクラスタイプの新しいオブジェクトを作成します。つまり、クラスを作成します。そしてクラスはPythonのオブジェクトです!
obj = type('obj', (object,), {'propertyName' : 'propertyValue'})
type(obj)
与える
<class 'type'>
1行にdict属性(別名プロパティ)を含むカスタムクラスまたはビルドインクラスの新しいオブジェクトを作成するには、次のように呼び出すだけです。
new_object = type('Foo', (object,), {'name': 'new object'})()
そしていま
type(new_object)
です
<class '__main__.Foo'>
これは、クラスFooのオブジェクトであることを意味します
Pythonが初めての方にもお役に立てば幸いです。