73

In Javascript it would be:

var newObject = { 'propertyName' : 'propertyValue' };
newObject.propertyName;  // returns "propertyValue"

But the same syntax in Python would create a dictionary, and that's not what I want

new_object = {'propertyName': 'propertyValue'}
new_object.propertyName  # raises an AttributeError
4

9 に答える 9

114
obj = type('obj', (object,), {'propertyName' : 'propertyValue'})

関数の用途には2 種類ありtypeます。

于 2009-10-07T01:04:15.273 に答える
55

Python 3.3 では、まさにSimpleNamespaceその目的のためにクラスが追加されました。

>>> from types import SimpleNamespace

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

>>> obj.propertyName
'propertyValue'

オブジェクトを構築するための適切なコンストラクターに加えて、期待どおりに動作するようにと( 3.4 で文書化SimpleNamespace) を定義します。__repr____eq__

于 2015-01-13T20:58:16.887 に答える
36

ピーターの答え

obj = lambda: None
obj.propertyName = 'propertyValue'
于 2009-10-07T01:23:07.270 に答える
11

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

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

obj = InlineClass({'propertyName' : 'propertyValue'})
于 2009-10-07T00:47:01.690 に答える
7

私はSmashery のアイデアが好きですが、Python は自分でクラスを変更できるようにすることで満足しているようです:

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

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

于 2009-10-07T01:00:48.743 に答える
3

SilentGhost は良い答えを出しましたが、彼のコードは実際にはメタクラス タイプの新しいオブジェクトを作成します。つまり、クラスを作成します。そして、クラスは Python のオブジェクトです!

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

与える

<class 'type'>

dict属性 (別名プロパティ)を持つカスタムまたは組み込みクラスの新しいオブジェクトを1 行で作成するには、次のように呼び出すことをお勧めします。

new_object = type('Foo', (object,), {'name': 'new object'})()

そしていま

type(new_object) 

<class '__main__.Foo'>

これは、クラス Foo のオブジェクトであることを意味します

Python初心者の方の参考になれば幸いです。

于 2019-04-08T19:56:40.930 に答える
2

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

ここで説明したので(これまでで最も評価の高い回答)、説明を再入力しません。でも、質問があれば聞いてください、答えます。

クラスが実際には重要ではない汎用オブジェクトが必要な場合は、次のようにすることができます。

class Generic(object):
    pass

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

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

このトリックは、より便利な辞書が必要な場合に役立ちます。x.fooよりも入力しやすいと思いますx["foo"]

于 2009-10-07T06:39:34.453 に答える
0
class test:
    def __setattr__(self,key,value):
        return value


myObj = test()
myObj.mykey = 'abc' # set your property and value
于 2009-10-07T02:04:35.807 に答える