首页 > 解决方案 > 是否可以遍历 dir() 的项目的 *values*?

问题描述

我正在尝试做这样的事情:

class random_class():

    def __init__(self, color):
        self.color = color

    def iterate(self):
        for item in dir(self):
            print (self.item)

instance = random_class("blue")

random_class.iterate(instance)

但如果我这样做,我会得到:

AttributeError: 'random_class' object has no attribute 'item'

这意味着它正在搜索item实例中命名的属性

标签: python

解决方案


如果您正在尝试获取属性,您将删除 self 关键字,因为它不需要,因为您已经从 dir 中提取值。

但是,如果您想要实际值,则可以使用它getattr来获取循环中的值。

class random_class():

def __init__(self, color):
    self.color = color

def iterate(self):
    for item in dir(self):
        print (getattr(self, item))

instance = random_class("blue")

random_class.iterate(instance)

这会将关联值转储到对象上的该属性。

编辑

请注意,以上将包括类的内置方法。如果您不想这样做,请忽略以 __ 开头的项目

class random_class():

def __init__(self, color):
    self.color = color

def iterate(self):
    for item in dir(self):
        if not item.startswith('__'):
            print (getattr(self, item))

instance = random_class("blue")

random_class.iterate(instance)

推荐阅读