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

时间:2015-12-09 14:13:51

标签: python class properties

我对python很新,并尝试编写模块/

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

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

在询问这些价值观之后 名称:'我的第一个应用程序' 作者:'我'。

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

request = my_app + '.' + attribute TypeError: unsupported operand type(s) for +: 'Application' and 'str'

我尝试使用str(my_app),但当然它不起作用,因为对象的引用已经消失。

使用__dict__的第一个请求可能没问题,但我需要的是authornamedict.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

2 个答案:

答案 0 :(得分:0)

my_appApplication的一个实例,其类型Application。另一方面,'.'类型的字符串。

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

Applicationstring之间没有定义添加内容。因此,您会收到错误。

另外,为什么你的逗号是

的最后一个参数
my_app = Application('my first app',author='me',)

答案 1 :(得分:0)

好的,答案是使用getattr方法。

我刚用这一行替换了最后一行,它就像一个魅力。

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