Jad*_*ias 48 python dynamic-languages instantiation
在Javascript中它将是:
var newObject = { 'propertyName' : 'propertyValue' };
Run Code Online (Sandbox Code Playgroud)
怎么用Python做?
Sil*_*ost 85
obj = type('obj', (object,), {'propertyName' : 'propertyValue'})
Run Code Online (Sandbox Code Playgroud)
Jad*_*ias 28
彼得的回答
obj = lambda: None
obj.propertyName = 'propertyValue'
Run Code Online (Sandbox Code Playgroud)
Syl*_*oux 28
Python 3.3 SimpleNamespace为这个目的添加了类:
>>> from types import SimpleNamespace
>>> obj = SimpleNamespace(propertyName='propertyValue')
>>> obj
namespace(propertyName='propertyValue')
>>> obj.propertyName
'propertyValue'
Run Code Online (Sandbox Code Playgroud)
除了用于构建对象的适当构造函数之外,还SimpleNamespace定义__repr__和__eq__(在3.4中记录)以按预期运行.
Sma*_*ery 13
我不知道是否有内置的方法来做,但你总是可以定义这样的类:
class InlineClass(object):
def __init__(self, dict):
self.__dict__ = dict
obj = InlineClass({'propertyName' : 'propertyValue'})
Run Code Online (Sandbox Code Playgroud)
我喜欢Smashery的想法,但Python似乎满足于让你自己修改类:
>>> class Inline(object):
... pass
...
>>> obj = Inline()
>>> obj.test = 1
>>> obj.test
1
>>>
Run Code Online (Sandbox Code Playgroud)
在Python 2.5中工作得很好.请注意,您必须对从派生的类执行此操作object- 如果将行更改为,则无效obj = object.
SilentGhost 有一个很好的答案,但他的代码实际上创建了一个元类类型的新对象,换句话说,它创建了一个类。类是 Python 中的对象!
obj = type('obj', (object,), {'propertyName' : 'propertyValue'})
type(obj)
Run Code Online (Sandbox Code Playgroud)
给出
<class 'type'>
Run Code Online (Sandbox Code Playgroud)
要在一行中创建具有dict属性(又名属性)的自定义或内置类的新对象,我建议只调用它:
new_object = type('Foo', (object,), {'name': 'new object'})()
Run Code Online (Sandbox Code Playgroud)
现在
type(new_object)
Run Code Online (Sandbox Code Playgroud)
是
<class '__main__.Foo'>
Run Code Online (Sandbox Code Playgroud)
这意味着它是 Foo 类的对象
希望对 Python 新手有所帮助。
| 归档时间: |
|
| 查看次数: |
25689 次 |
| 最近记录: |