在python中是否存在创建空对象的特殊类?我尝试了object(),但它不允许我添加字段.我想这样使用它:
obj = EmptyObject()
obj.foo = 'far'
obj.bar = 'boo'
Run Code Online (Sandbox Code Playgroud)
我应该每次(在几个独立的脚本中)定义这样的新类吗?
class EmptyObject:
pass
Run Code Online (Sandbox Code Playgroud)
我用python2.7
types.SimpleNamespacePython 3.3引入了这个目的.文档还显示了一种在Python中自己实现它的简单方法,因此您可以将它添加到Python之前的3.3版本中并使用它就像它在那里一样(注意实际的实现是在C中完成的):
class SimpleNamespace (object):
def __init__ (self, **kwargs):
self.__dict__.update(kwargs)
def __repr__ (self):
keys = sorted(self.__dict__)
items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
return "{}({})".format(type(self).__name__, ", ".join(items))
def __eq__ (self, other):
return self.__dict__ == other.__dict__
Run Code Online (Sandbox Code Playgroud)
但是,当然,如果你不需要它的一些功能,一个简单的class Empty: pass功能也是如此.
如果你正在寻找一个可以添加任意静态成员的占位符对象,那么我得到的最接近的是一个空的lambda函数.
obj = lambda: None # Dummy function
obj.foo = 'far'
obj.bar = 'boo'
print obj.foo, obj.bar
# far boo
Run Code Online (Sandbox Code Playgroud)
记住: obj是不是一个类的对象,对象并不意味着类的实例,因为在Python类和函数是在运行时的对象,就像类实例
types.SimpleNamespacePython 2.7 中没有,您可以使用collections.namedtuple()不可变对象:
>>> from collections import namedtuple
>>> FooBar = namedtuple('FooBar', 'foo bar')
>>> FooBar('bar', 'foo')
FooBar(foo='bar', bar='foo')
Run Code Online (Sandbox Code Playgroud)
或者argparse.Namespace:
>>> from argparse import Namespace
>>> o = Namespace(foo='bar')
>>> o.bar = 'foo'
>>> o
Namespace(bar='foo', foo='bar')
Run Code Online (Sandbox Code Playgroud)
另请参阅如何创建对象并向其添加属性?
| 归档时间: |
|
| 查看次数: |
3216 次 |
| 最近记录: |