AttributeError:“ str”对象没有属性“ __dict__”

时间:2019-07-24 04:10:59

标签: python python-3.x switch-statement instance-variables

我想在类中找到实例变量,但出现错误 请谁能帮助我我要去哪里错了 预先感谢

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"))

1 个答案:

答案 0 :(得分:1)

类名不应该是您的代码使用真实类对象的字符串,因此请更改为:

s = PythonSwitch()

print(s.switch(1,PythonSwitch))
print(s.switch(0,PythonSwitch))

按照您的方式进行操作,只是传递一个字符串对象,该字符串对象如您的输出所述不会构成__dict__属性。

编辑 另外,您的代码中还有一个错误:

return getattr(self, 'info_' + str(typeOfInfo), lambda: default)(nameofclass)

此行是错误的,因为您的lambda表达式不需要任何值,而应该是因为每个方法都至少获取一个self参数。因此,您需要将其更改为:

return getattr(self, 'info_' + str(typeOfInfo), lambda self: default (nameofclass)