实例化-如何在Python中使用属性创建内联对象?

用Javascript将是:

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

如何在Python中完成?

9个解决方案
83 votes
obj = type('obj', (object,), {'propertyName' : 'propertyValue'})

type有两种功能使用。

SilentGhost answered 2020-02-23T00:28:10Z
28 votes

彼得的答案

obj = lambda: None
obj.propertyName = 'propertyValue'
Jader Dias answered 2020-02-23T00:28:30Z
25 votes

Python 3.3为此目的添加了SimpleNamespace类:

>>> from types import SimpleNamespace

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

>>> obj.propertyName
'propertyValue'

除了用于构建对象的适当构造函数之外,SimpleNamespace还定义了__repr____eq__(在3.4中进行了记录),以达到预期的性能。

Sylvain Leroux answered 2020-02-23T00:28:55Z
13 votes

我不知道是否有内置的方法,但是您总是可以定义这样的类:

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

obj = InlineClass({'propertyName' : 'propertyValue'})
Smashery answered 2020-02-23T00:29:15Z
6 votes

我喜欢Smashery的想法,但是Python似乎很满足您让您自己修改类的内容:

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

对我来说,在Python 2.5中工作正常。 请注意,您必须对从object派生的类执行此操作-如果将行更改为obj = object,它将无法正常工作。

Chris Lutz answered 2020-02-23T00:29:40Z
2 votes

在Python中,使用x.foo函数声明一个类很容易,该函数可以使用可选参数为您设置实例。 如果不指定参数,则将得到一个空白实例,如果指定了部分或全部参数,则将初始化该实例。

我在这里进行了解释(这是迄今为止评分最高的答案),因此我不会再次输入解释。 但是,如果您有任何疑问,请提问,我会回答。

如果您只希望一个通用对象,其类并不重要,则可以执行以下操作:

class Generic(object):
    pass

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

一个明显的扩展是添加一个x.foo函数,该函数可以打印有用的内容。

有时,当您想要更方便的字典时,此技巧非常有用。 我发现键入x.foox["foo"]更容易。

steveha answered 2020-02-23T00:30:18Z
1 votes

另一个可行的选择是使用namedtuple:

from collections import namedtuple

message = namedtuple('Message', ['propertyName'], verbose=True)
messages = [
    message('propertyValueOne'),
    message('propertyValueTwo')
]
b.b3rn4rd answered 2020-02-23T00:30:38Z
0 votes
class test:
    def __setattr__(self,key,value):
        return value


myObj = test()
myObj.mykey = 'abc' # set your property and value
user149513 answered 2020-02-23T00:30:54Z
0 votes

SilentGhost有一个很好的答案,但是他的代码实际上创建了一个元类类型的新对象,换句话说,它创建了一个类。 类是Python中的对象!

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

<class 'type'>

要在一行中创建一个具有dict属性(又称属性)的自定义或内置类的新对象,建议您将其称为:

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

现在

type(new_object) 

<class '__main__.Foo'>

这意味着它是Foo类的对象

我希望它对Python的新手有所帮助。

Leo Skhrnkv answered 2020-02-23T00:31:41Z
translate from https://stackoverflow.com:/questions/1528932/how-to-create-inline-objects-with-properties-in-python