Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何访问对应于该属性名称的给定字符串的对象属性_Python_Object_Attributes - Fatal编程技术网

Python 如何访问对应于该属性名称的给定字符串的对象属性

Python 如何访问对应于该属性名称的给定字符串的对象属性,python,object,attributes,Python,Object,Attributes,如何设置/获取x给定的t属性值 class Test: def __init__(self): self.attr1 = 1 self.attr2 = 2 t = Test() x = "attr1" 有一些内置函数称为和 在这种情况下 x = getattr(t, 'attr1') setattr(t, 'attr1', 21) 注意:这个答案非常过时。它使用先前使用的new模块应用于Python 2。 python内置函数setattr和getattr

如何设置/获取
x
给定的
t
属性值

class Test:
   def __init__(self):
       self.attr1 = 1
       self.attr2 = 2

t = Test()
x = "attr1"

有一些内置函数称为和

在这种情况下

x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
注意:这个答案非常过时。它使用先前使用的
new
模块应用于Python 2。 python内置函数setattr和getattr。它可以用来设置和获取类的属性

一个简单的例子:

>>> from new import  classobj

>>> obj = classobj('Test', (object,), {'attr1': int, 'attr2': int}) # Just created a class

>>> setattr(obj, 'attr1', 10)

>>> setattr(obj, 'attr2', 20)

>>> getattr(obj, 'attr1')
10

>>> getattr(obj, 'attr2')
20

如果希望将逻辑隐藏在类中,您可能更喜欢使用广义getter方法,如下所示:

class Test:
    def __init__(self):
        self.attr1 = 1
        self.attr2 = 2

    def get(self,varname):
        return getattr(self,varname)

t = Test()
x = "attr1"
print ("Attribute value of {0} is {1}".format(x, t.get(x)))
产出:

Attribute value of attr1 is 1
另一种可以更好地隐藏它的方法是使用神奇的方法
\uuuu getattribute\uuuu
,但我一直得到一个无休止的循环,当我试图在该方法中获取属性值时,无法解决这个循环


另外请注意,您也可以使用
vars()
。在上面的示例中,您可以通过
返回vars(self)[varname]
来交换
getattr(self,varname)
,但是根据的答案,
getattr
可能更可取。

还有用于删除属性的delattr,但是这很少使用。hasattr用于测试对象是否具有特定的attr,尽管在这种情况下,使用三参数形式getattr(object、attrname、default)通常更好。我们是否可以像这样使用getattr,并说我有一个dataframe
df1
,变量
x='df1'
,即df1作为变量x中的字符串。我想像这样打印df的形状,
getattr(x,'shape')
getattr('df1','shape')
。我知道这不能用getattr和其他任何方法来完成。你可以用
getattr(globals()[x],'shape')
Attribute value of attr1 is 1