python类

时间:2017-07-17 17:36:13

标签: python class oop

Class intSet

我试图理解MIT python类中的以下代码。当我按如下方式创建类intSet的对象时,我遇到了其中一个属性的问题。

s=intSet()

并尝试

s.vals()

我收到以下错误

  Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    s.vals()
TypeError: 'list' object is not callable
这是为什么?我被告知我不应该直接尝试s.vals因为数据隐藏,当我尝试s.vals时会返回正确的列表但是在尝试s.vals()时会出错。有人可以解释这个错误吗?我对OOP和python都很陌生,所以我为我糟糕的质疑道歉。任何帮助是极大的赞赏。

3 个答案:

答案 0 :(得分:2)

vals不是一种属性,因此您无法调用它。在python中,括号表示您正在调用方法。所以只需s.vals

答案 1 :(得分:1)

当你使用s.vals()时,它会尝试调用函数&#39; vals&#39;通过变量&#39;然而,当你使用s.vals时,它不会查找函数只返回存储在s.vals中的值。

答案 2 :(得分:0)

您正在尝试呼叫列表中的vals。你正在做这样的事情[](),这是不可能的。

你应该用OOP方式做的是声明这样的getter函数:

class intSet(object):
    def __init__(self):
        self.__vals = [] # kinda private class instance
        # .... other code


    @property
    def vals(self):
        return self.__vals

intset = intSet()
intset.vals # is that list

更多信息about private members in pythonabout properties