用Python创建可以接受自定义属性的对象的最简单方法

2024-04-26 12:14:40 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,类的实例可以动态设置自定义属性:

class A(object):
    pass

a=A()
a.x=1

但是,如果实例化object,这就不起作用了

object().x=1 
#raises AttributeError: 'object' object has no attribute 'x'

object没有__dict__属性来存储自定义属性,因此这不起作用。你知道吗

创建可以动态创建自定义属性的对象的最简单方法是什么?你知道吗


Tags: 对象实例方法no属性object动态attribute
3条回答

似乎您创建“空”类的示例是最快的解决方案。你知道吗

不过,我不建议这样做。当您在赋值之前访问属性“x”时,您将得到AttributeError。在应用程序中的其他地方,您将无法确定如何处理对象,因为您不能使用类型检查来确定对象的特性(属性等)。你必须一直使用hasattr()

如果仍然希望对象接受任何属性名,请考虑重写类中的__getattr____setattr__。查看这个python文档:http://docs.python.org/2/reference/datamodel.html#object.__getattr__

你在问题中提出的方式通常可以用来嘲弄别人。但是,如果您经常这样做,您可能需要查看mock库。在Python3中,它是stdlib(import unittest.mock)的一部分

我看到的一个技巧是:

x = lambda: magic
x.foo = 1
x.bar = 2

它利用了事实函数的__dict__

相关问题 更多 >