web-dev-qa-db-ja.com

Pythonでプロパティを使用してインラインオブジェクトを作成する方法

JavaScriptでは次のようになります。

var newObject = { 'propertyName' : 'propertyValue' };

Pythonでそれを行う方法?

46
Jader Dias
obj = type('obj', (object,), {'propertyName' : 'propertyValue'})

2種類のtype関数で使用 があります。

82
SilentGhost

ピーターの答え

obj = lambda: None
obj.propertyName = 'propertyValue'
27
Jader Dias

Python 3.3はその正確な目的のために SimpleNamespace クラスを追加しました:

>>> from types import SimpleNamespace

>>> obj = SimpleNamespace(propertyName='propertyValue')
>>> obj
namespace(propertyName='propertyValue')

>>> obj.propertyName
'propertyValue'

オブジェクトを構築するための適切なコンストラクターに加えて、SimpleNamespace__repr__および__eq__.4に記載 )を定義して期待どおりに動作します。

21
Sylvain Leroux

組み込みの方法があるかどうかはわかりませんが、次のようなクラスをいつでも定義できます。

class InlineClass(object):
    def __init__(self, dict):
        self.__dict__ = dict

obj = InlineClass({'propertyName' : 'propertyValue'})
13
Smashery

私は Smashery's のアイデアが好きですが、Pythonは自分でクラスを変更できるコンテンツのようです:

>>> class Inline(object):
...     pass
...
>>> obj = Inline()
>>> obj.test = 1
>>> obj.test
1
>>>

Python 2.5の場合、私にとっては問題ありません。objectから派生したクラスに対してこれを行う必要があることに注意してください。行をobj = objectに変更すると機能しません。 。

6
Chris Lutz

Python=では、オプションの引数を使用してインスタンスを設定できる__init__()関数を使用してクラスを宣言することは簡単です。引数を指定しない場合、空のインスタンスを取得し、引数の一部またはすべてを指定した場合は、インスタンスを初期化します。

私はそれを説明しました ここ (これまでの私の最高評価の回答)なので、説明を再入力しません。ただし、ご不明な点がございましたら、お気軽にお問い合わせください。

クラスがそれほど重要ではないジェネリックオブジェクトが必要な場合は、次のようにできます。

_class Generic(object):
    pass

x = Generic()
x.foo = 1
x.bar = 2
x.baz = 3
_

明らかな拡張は、何か便利なものを出力する__str__()関数を追加することです。

このトリックは、より便利な辞書が必要な場合に便利です。 _x.foo_よりも_x["foo"]_を入力する方が簡単です。

2
steveha

別の実行可能なオプションは namedtuple を使用することです:

from collections import namedtuple

message = namedtuple('Message', ['propertyName'], verbose=True)
messages = [
    message('propertyValueOne'),
    message('propertyValueTwo')
]
1
b.b3rn4rd
class test:
    def __setattr__(self,key,value):
        return value


myObj = test()
myObj.mykey = 'abc' # set your property and value
0
user149513

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が初めての方にもお役に立てば幸いです。

0
Leo Skhrnkv