Python 动态列出类的属性并询问这些值

Python 动态列出类的属性并询问这些值,python,class,properties,Python,Class,Properties,我对python非常陌生,尝试编写一个模块/ 我尝试动态请求类的所有属性,然后我想请求值,但我无法获得我想要的结果 目标:拥有一个属性列表。在这个例子中,它将是 姓名和作者 在询问这些值之后 名称:“我的第一个应用” 作者:《我》 如果运行此代码,我将在第39行引发异常: request=my_app+'.+属性 TypeError:+:“应用程序”和“str”的操作数类型不受支持。 我尝试使用str(我的应用程序),但它当然不起作用,因为对对象的引用消失了 第一个带有\u dict\u的请求可

我对python非常陌生,尝试编写一个模块/

我尝试动态请求类的所有属性,然后我想请求值,但我无法获得我想要的结果

目标:拥有一个属性列表。在这个例子中,它将是 姓名和作者

在询问这些值之后 名称:“我的第一个应用” 作者:《我》

如果运行此代码,我将在第39行引发异常:

request=my_app+'.+属性
TypeError:+:“应用程序”和“str”的操作数类型不受支持。

我尝试使用
str(我的应用程序)
,但它当然不起作用,因为对对象的引用消失了

第一个带有
\u dict\u
的请求可能没问题,但我需要的是将
作者
名称
作为
dict.keys
,而不是
\u应用程序作者
\u应用程序名称

这是一个简单的提问示例,但在我的模块中,我有很多属性

也许有人有线索

class Application(object):
    def __init__(self, name,author=''):
        self.__name = name
        self.__author = author

    # ----------- NAME -------------
    @property
    def name(self):
        "Current name of the model"
        return self.__name

    @name.setter
    def name(self, name):
        self.__name = name

    @name.deleter
    def name(self):
        pass

    # ----------- AUTHOR -------------
    @property
    def author(self):
        "Current author of the model"
        return self.__author

    @author.setter
    def author(self, author):
        self.__author = author

    @author.deleter
    def author(self):
        pass

my_app = Application('my first app',author='me',)

print my_app.__dict__

for attribute in dir(my_app):
    if not attribute.startswith('__'):
        if not attribute.startswith('_'):
            if not attribute == 'instances':
                request =  my_app + '.' + attribute
结果

{'_Application__author': 'me', '_Application__name': 'my first app'}

Traceback (most recent call last):
  File "/Users/reno/Desktop/testtt.py", line 42, in <module>
    request =  my_app + '.' + attribute
TypeError: unsupported operand type(s) for +: 'Application' and 'str'
[Finished in 0.1s with exit code 1]
[shell_cmd: python -u "/Users/reno/Desktop/testtt.py"]
[dir: /Users/reno/Desktop]
[path: /usr/bin:/bin:/usr/sbin:/sbin]
{“应用程序作者”:“我”,“应用程序名”:“我的第一个应用程序”}
回溯(最近一次呼叫最后一次):
文件“/Users/reno/Desktop/testtt.py”,第42行,在
请求=我的应用程序+'。+属性
TypeError:+:“应用程序”和“str”的操作数类型不受支持
[在0.1s内完成,退出代码为1]
[shell\u cmd:python-u”/Users/reno/Desktop/testtt.py“]
[dir:/Users/reno/Desktop]
[路径:/usr/bin:/bin:/usr/sbin:/sbin]

我的应用程序
应用程序
的一个实例,它的类型是
应用程序
。另一方面,
是按类型划分的字符串

现在,当您使用
+
添加两个东西时,Python需要知道如何添加这些东西。对于数字,它知道如何做到这一点。对于字符串,它也知道这一点:它只是将它们连接起来

但是在
应用程序
字符串
之间没有定义任何添加。因此,您得到了错误

还有,为什么在的最后一个参数后面有逗号

my_app = Application('my first app',author='me',)

my_app
应用程序
的一个实例,其类型为
应用程序
。另一方面,
是按类型划分的字符串

现在,当您使用
+
添加两个东西时,Python需要知道如何添加这些东西。对于数字,它知道如何做到这一点。对于字符串,它也知道这一点:它只是将它们连接起来

但是在
应用程序
字符串
之间没有定义任何添加。因此,您得到了错误

还有,为什么在的最后一个参数后面有逗号

my_app = Application('my first app',author='me',)

好的,答案是使用
getattr
方法

我刚刚用这一行替换了最后一行,它就像一个符咒

                print attribute , ':' , getattr(my_app, attribute)

好的,答案是使用
getattr
方法

我刚刚用这一行替换了最后一行,它就像一个符咒

                print attribute , ':' , getattr(my_app, attribute)

我知道添加不是正确的方法,但它是为了解释我想做什么。逗号是一个疏忽,因为我删除了我的类的许多属性,使其尽可能短,并专注于问题…Tx@Konstantin,感谢您关注我的问题@雷诺-我认为你的问题很好,我只是没有正确地阅读:)我知道加法不是正确的方法,但它是为了解释我想做什么。逗号是一个疏忽,因为我删除了我的类的许多属性,使其尽可能短,并将重点放在问题上…Tx@Konstantin,感谢你关注我的问题@雷诺-我认为你的问题很好,我只是没有正确阅读:)