Python-像在字典中一样访问对象属性

Python-像在字典中一样访问对象属性,python,object,dictionary,Python,Object,Dictionary,如何访问my_str上定义的my_object字段 >>> my_object.name = 'stuff' >>> my_str = 'name' >>> my_object[my_str] # won't work because it's not a dictionary :) 或者,如果您不确定该名称是否作为键存在,并且希望提供回退而不是引发异常: getattr(my_object, my_str) 一般来说,你不能采用\uuu

如何访问
my_str
上定义的
my_object
字段

>>> my_object.name = 'stuff'
>>> my_str = 'name'
>>> my_object[my_str] # won't work because it's not a dictionary :)
或者,如果您不确定该名称是否作为键存在,并且希望提供回退而不是引发异常:

getattr(my_object, my_str)

一般来说,你不能采用
\uuu dict\uuu
-方法。永远有效的是

getattr(my_object, my_str, "Could not find anything")

如果您想要类似dict的访问,只需定义一个具有重载索引运算符的类。

您可以通过定义一个小的方法族(主要是)为类的对象提供对
[]
运算符的支持。请参阅文档中接下来的几个条目,了解其他一些要实现的内容,以获得全面支持

请注意,对于属性、
\uuuuu slots\uuuuu
\uuuu getattr\uuuuuu/\uuuuu getattribute\uuuuuu/\uuuu setattr\uuuuuu
重载以及可能的其他内容,这会中断。好的,谢谢您提供的信息。您是否认为
getattr(my_object,my_str)
对性能也有好处?性能是您最不关心的问题。如果是,您可以用C重写该部分(即整个循环,以避免许多跨语言调用),但在考虑此类优化之前,您应该有确凿的证据证明出现了不可接受的减速。虽然此代码可以提供问题的解决方案,强烈建议您提供有关此代码为什么和/或如何回答此问题的其他上下文。从长远来看,只有代码的答案通常会变得毫无用处,因为未来遇到类似问题的观众无法理解解决方案背后的原因。与myobject相比,myobject的优势是什么?更好的性能?我可以回到标准的“它更像蟒蛇”答案吗?此外,利用私人变量也有其自身的风险。您试图做的是getattr和setattr的用途。但警告一句-如果您使用动态属性名称,您应该使用
try:
或添加
if hasattr(
在使用
getattr
之前,确保您没有试图访问不存在的东西。嗯?
getattr
不会在属性不存在时抛出异常。如果hasattr给我这个,基本上是
的语法糖,否则给我默认值。回答我自己的无知,因为我总是为默认值传递第三个参数,例如,
getattr(my_object,my_str,None)
。顺便说一句,这在javascript中完全有效
getattr(my_object, my_str, "Could not find anything")
getattr(myobject, my_str)