如何在Python中创建具有属性的内联对象?

时间:2009-10-07 00:43:55

标签: python instantiation dynamic-languages

在Javascript中它将是:

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

如何在Python中完成?

9 个答案:

答案 0 :(得分:78)

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

two kinds of type function uses

答案 1 :(得分:25)

彼得的回答

obj = lambda: None
obj.propertyName = 'propertyValue'

答案 2 :(得分:19)

Python 3.3为了这个目的添加了SimpleNamespace类:

>>> from types import SimpleNamespace

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

>>> obj.propertyName
'propertyValue'

除了构建对象的适当构造函数之外,SimpleNamespace定义__repr____eq__documented in 3.4)以按预期行事。

答案 3 :(得分:12)

我不知道是否有内置方法可以做到这一点,但你总是可以定义这样一个类:

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

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

答案 4 :(得分:6)

我喜欢Smashery's的想法,但Python似乎满足于让你自己修改类:

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

对我来说,在Python 2.5中运行得很好。请注意,您必须对从object派生的类执行此操作 - 如果将行更改为obj = object,则无效。

答案 5 :(得分:2)

在Python中很容易声明一个具有__init__()函数的类,该函数可以为您设置实例,并带有可选参数。如果未指定参数,则会获得空白实例,并且如果指定了部分或全部参数,则初始化实例。

我解释了here(我迄今为止评价最高的答案)所以我不会重新输入解释。但是,如果您有疑问,请询问,我会回答。

如果你只是想要一个类并不重要的通用对象,你可以这样做:

class Generic(object):
    pass

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

一个明显的扩展是添加一个__str__()函数来打印有用的东西。

当你想要一个更方便的字典时,这个技巧很好。我发现输入x.foox["foo"]更容易。

答案 6 :(得分:1)

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

from collections import namedtuple

message = namedtuple('Message', ['propertyName'], verbose=True)
messages = [
    message('propertyValueOne'),
    message('propertyValueTwo')
]

答案 7 :(得分:0)

class test:
    def __setattr__(self,key,value):
        return value


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

答案 8 :(得分:0)

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新手。