为什么python obj.atribute返回地址位置而obj.atribute.atribute返回值?

时间:2019-06-09 21:05:31

标签: python list callable-object

要获取属性的值,我需要调用method.attribute.attribute而不是method.attribute,这是为什么呢?调用method.attribute会产生一个内存地址。我应该如何更改我的代码以使method.attribute工作?

关于此中心的大多数问题都围绕调用print(f)而不是print(f())

class MyList:
    """stores a list and does other stuff eventualy"""
    this_list = []

    def __init__(self, *args):
        for arg in args:
            self.this_list.append(arg)

    def print_list(self):
        """prints the atribute:"description" from the stored objects in the list"""
        for x in range(len(self.this_list)):
            print(MyClassObj(self.this_list[x]).description, sep="\n")

这是应该打印属性 description

的值的代码
class MyClassObj:
    """test object to be stores in the "MyList" object."""

    def __init__(self, description):
        self.description = description

这是包含我要获取的属性的对象。

class CallList:
    """creates the objects, lists and calls the print method"""
    @staticmethod
    def main():
        test1, test2 = MyClassObj("Test1"), MyClassObj("Test2")
        list1 = MyList(test1, test2)
        list1.print_list()

Main()在上述类之外调用。

我得到的输出是

<__main__.MyClassObj object at 0x007908F0>
<__main__.MyClassObj object at 0x00790910>

Process finished with exit code 0

如果我换行:

print(MyClassObj(self.this_list[x]).description.description, sep="\n")

我得到了预期的结果:

Test1
Test2

Process finished with exit code 0

所以问题是为什么以及如何更改代码?

1 个答案:

答案 0 :(得分:0)

print_list中的

self.this_list[x]已经是MyClassObj,因此MyClassObj(self.this_list[x])创建了一个新的MyClassObj,其MyClassObj作为其description

因为没有定义将MyClassObj转换为print的字符串的方法,Python使用显示内存地址的默认转换。