我对python很新,并尝试编写模块/
我尝试动态请求我的类的所有属性/属性然后我想要求值,但我无法获得我想要的结果。
目标:拥有一个属性列表。在这个例子中它会是 姓名和作者
在询问这些价值观之后 名称:'我的第一个应用程序' 作者:'我'。
如果我运行此代码,我将在第39行引发异常:
request = my_app + '.' + attribute
TypeError: unsupported operand type(s) for +: 'Application' and 'str'
我尝试使用str(my_app)
,但当然它不起作用,因为对象的引用已经消失。
使用__dict__
的第一个请求可能没问题,但我需要的是author
和name
为dict.keys
,而不是_Application__author
和{ {1}}。
这是一个简单的问题例子,但在我的模块中我有很多属性。
也许有人有线索?
_Application__name
结果
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
答案 0 :(得分:0)
my_app
是Application
的一个实例,其类型是Application
。另一方面,'.'
是类型的字符串。
现在,当您使用+
添加两个内容时,Python需要知道如何添加这些内容。对于数字,它知道如何做到这一点。对于字符串,它也知道:它只是将它们连接起来。
但Application
和string
之间没有定义添加内容。因此,您会收到错误。
另外,为什么你的逗号是
的最后一个参数my_app = Application('my first app',author='me',)
答案 1 :(得分:0)
好的,答案是使用getattr
方法。
我刚用这一行替换了最后一行,它就像一个魅力。
print attribute , ':' , getattr(my_app, attribute)