Я хочу найти переменную экземпляра в классе, но получаю сообщение об ошибке Пожалуйста, помогите мне, где я ошибаюсь заранее спасибо
class PythonSwitch:
def switch(self, typeOfInfo,nameofclass):
default = "invalid input"
return getattr(self, 'info_' + str(typeOfInfo), lambda: default)(nameofclass)
def info_1(self,nameofclass):
print("Class name : ",__class__.__name__)
print("---------- Method of class ----------")
print(dir(nameofclass))
print("---------- Instance variable in class ----------")
print(nameofclass.__dict__)
def info_2(self,nameofclass):
print("---------- Method of class ----------")
print(dir(nameofclass))
def info_3(self,nameofclass):
print("---------- Instance variable in class ----------")
print(nameofclass.__dict__)
s = PythonSwitch()
print(s.switch(1,"PythonSwitch"))
print(s.switch(0,"PythonSwitch"))
Имя класса не должно быть строкой, в вашем коде используется объект реального класса, поэтому измените его на это:
s = PythonSwitch()
print(s.switch(1,PythonSwitch))
print(s.switch(0,PythonSwitch))
Делая это так, как вы, просто передаете строковый объект, который, как указано в вашем выводе, не имеет атрибута __dict__
.
РЕДАКТИРОВАТЬ Также есть еще одна ошибка в вашем коде:
return getattr(self, 'info_' + str(typeOfInfo), lambda: default)(nameofclass)
Эта строка неверна, потому что ваше лямбда-выражение не ожидает никакого значения, а оно должно быть, потому что каждый метод получает хотя бы один параметр, равный self
. Поэтому вам нужно изменить его на:
return getattr(self, 'info_' + str(typeOfInfo), lambda self: default (nameofclass)
Если ваша проблема была решена, отметьте ответ как правильный, чтобы ваш вопрос можно было закрыть.