在Javascript中它将是:
var newObject = { 'propertyName' : 'propertyValue' };
如何在Python中完成?
答案 0 :(得分:78)
obj = type('obj', (object,), {'propertyName' : 'propertyValue'})
答案 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.foo
比x["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新手。