通过'dir(object)'迭代python对象的属性在定义的中失败

时间:2017-07-19 16:38:59

标签: python

注意:我使用jupyter notebook和python 3.6

我创建了一个班级myclass并添加了两个属性var1var2

class myclass():
    def __init__(self):    
        self.var1 = 1
        self.var2 = 2

cls = myclass()
print(dir(cls))

输出:

['__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__',
 'var1',
 'var2']

我测试过了 cls.var1 == 1 cls.var2 == 2都是真的。

尝试使用以下代码获取'var1''var2' cls对象的值时:

for attr in dir(cls):
    if not attr.startswith('__'):
        print(attr)
        print(cls[attr])

输出:

var1
[ignore traceback details...]
AttributeError: 'myclass' object has no attribute 'attr'

但根据第一行输出,attr已经var1,为什么在评估cls[attr]时会引发AttributeError?

0 个答案:

没有答案