2024-04-26 12:14:40 发布
网友
在python中,类的实例可以动态设置自定义属性:
class A(object): pass a=A() a.x=1
但是,如果实例化object,这就不起作用了
object
object().x=1 #raises AttributeError: 'object' object has no attribute 'x'
object没有__dict__属性来存储自定义属性,因此这不起作用。你知道吗
__dict__
创建可以动态创建自定义属性的对象的最简单方法是什么?你知道吗
似乎您创建“空”类的示例是最快的解决方案。你知道吗
不过,我不建议这样做。当您在赋值之前访问属性“x”时,您将得到AttributeError。在应用程序中的其他地方,您将无法确定如何处理对象,因为您不能使用类型检查来确定对象的特性(属性等)。你必须一直使用hasattr()等
hasattr()
如果仍然希望对象接受任何属性名,请考虑重写类中的__getattr__和__setattr__。查看这个python文档:http://docs.python.org/2/reference/datamodel.html#object.__getattr__
__getattr__
__setattr__
你在问题中提出的方式通常可以用来嘲弄别人。但是,如果您经常这样做,您可能需要查看mock库。在Python3中,它是stdlib(import unittest.mock)的一部分
import unittest.mock
我看到的一个技巧是:
x = lambda: magic x.foo = 1 x.bar = 2
它利用了事实函数的__dict__
似乎您创建“空”类的示例是最快的解决方案。你知道吗
不过,我不建议这样做。当您在赋值之前访问属性“x”时,您将得到AttributeError。在应用程序中的其他地方,您将无法确定如何处理对象,因为您不能使用类型检查来确定对象的特性(属性等)。你必须一直使用
hasattr()
等如果仍然希望对象接受任何属性名,请考虑重写类中的
__getattr__
和__setattr__
。查看这个python文档:http://docs.python.org/2/reference/datamodel.html#object.__getattr__你在问题中提出的方式通常可以用来嘲弄别人。但是,如果您经常这样做,您可能需要查看mock库。在Python3中,它是stdlib(
import unittest.mock
)的一部分我看到的一个技巧是:
它利用了事实函数的
__dict__
相关问题 更多 >
编程相关推荐