#python
#python
Вопрос:
Я пытаюсь сделать что-то вроде этого:
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
в экземпляре
Комментарии:
1. Просто печатайте
item
, а неself.item
.2. @martineau но если я это сделаю, я получу имена атрибутов (например
__subclasshook__ __weakref__ color iterate
) То, что я пытаюсь сделать, это получить значение, например, как только оно становится цветным, оно должно печататьсяblue
3. qwerty_url: Я считаю, что вам следовало адресовать свой комментарий @John Gordon.
4. Да, я новичок в этом, и я также понял, что должен был привести пример того, какой результат я пытался получить в своем сообщении, извините и спасибо всем за помощь.
5. не используйте
dir
для этого, используйтеvars
.dir
не должен использоваться ни для чего, кроме отладки
Ответ №1:
Если вы пытаетесь получить свойства, вы бы отбросили ключевое слово 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)
Ответ №2:
item
ссылается на переменную, определенную циклом, а не на атрибут объекта. Так что просто замените print(self.item)
на print(item)
.
Ответ №3:
item
ссылается на переменную в цикле, а не на атрибут объекта. Таким образом, вы можете просто распечатать item
и удалить self.
.
Код:
print(item)
Ответ №4:
Поскольку item не является атрибутом random_class , вы можете просто распечатать item вместо self.item:
class random_class():
def __init__(self, color):
self.color = color
def iterate(self):
for item in dir(self):
print (item)
instance = random_class("blue")
random_class.iterate(instance)