对象返回内存位置而不是值

时间:2017-05-23 10:59:07

标签: list python-3.x class object

所以我有这个课程:

#!/usr/bin/python3

class MyClass(object):
    def __init__(self, length):
        self._list = length

    def get(self, index):
        try:
            return self._list[index]
        except IndexError:
            return None

它接受一个列表并返回一个值,我认为是一个列表索引。我想要获得这个价值:

def my_function(a_list):
    a_list = MyClass

    for x in (10**p for p in range(1, 9)):
        if a_list:
            print(a_list)

def main():
    length = my_function(MyClass([i for i in range(0, 543)]))

但我一直只获得列表的内存位置,我认为这应该返回一个int。

我希望这是一个可行的代码,但我正在努力,传递一个"对象"在课堂上,这对我没有任何意义。

这是我应该使用的测试:

def test_large_list():
    s_list = My_Class([i for i in xrange(0, 100000)])
    assert len(s_list._list) == list_length(s_list)

好的,这是我的完整功能,它完成了,我这样做的方式,以便第一行采取参数

#!/usr/bin/python3

#def list_length(single_method_list):         This is what I am supposed to work with

from single_method_list import SingleMethodList


def my_function():      # This is how I have done it and it works.
    a_list = MyClass([i for i in range(0, 234589)])

    for x in (10**p for p in range(1, 8)):
        if a_list.get(x):
            print("More than", x)
            first = x
        else:
            print("Less than", x)
            last = x
            break

    answer = False
    while not answer:
        result = (first + last)/2
        result = int(round(result))
        print(result)
        if s_list.get(result):
            first = result
            print('first', result)
        else:
            last = result
            print('last', result)

        if s_list.get(result) and not s_list.get(result + 1):
            answer = True
            print(result + 1)


my_function()

我不知道还有什么可以解释我被困在哪里,这是OOP的一部分,我不知道我在这里需要相同的结果,只是把它传递给函数而不是在我为完成算法所做的功能中创建它。

2 个答案:

答案 0 :(得分:0)

你的班级做了其他事情。MyClass旨在初始化时采用List,因此命名length不是一个好主意。 此类的get()方法接受一个数字,并返回位于初始化self._list中该特定索引处的元素。 你的逻辑应该是:

def my_function(a_list):
    a_list = MyClass(a_list)

...

def main():
    length = my_function([i for i in range(0, 543)])

答案 1 :(得分:0)

只是澄清一些你可能会有的误解。

Class不会返回任何内容。这是创建对象的蓝图。

什么可以返回值是方法(函数)。例如,如果要编写一个返回某个列表长度的方法:

def my_function(some_list):
    return len(some_list)

或者在你的情况下:

def my_function(a_list):
    return len(a_list._list)

请注意,您不应该调用变量list。它是python中的内置函数,用于创建列表。

正如你所看到的,python中还有另一个内置函数len,它返回list,tuple,dictionary等的长度。

希望这会有所帮助,尽管你仍然有点不清楚你想要实现的目标。