【问题标题】:object returning memory location instead of value对象返回内存位置而不是值
【发布时间】:2017-05-23 10:59:07
【问题描述】:

所以我有这门课:

#!/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 的一部分,我不知道我在这里需要相同的结果,只是将它传递给函数而不是创建它在我为执行算法而执行的函数内部。

【问题讨论】:

  • MyClass 从未使用my_function 中的列表进行初始化。另外,list_length 是什么?
  • 抱歉,我复制粘贴了函数,忘记改名字了。这是我接受的一个测试,我现在正试图涵盖我无法做到的部分,我已经完成的实际测试,但由于我仍在努力解决其中的 OOP 部分,这就是我想要做的理解。我已将 list_length 更正为 my_function。 main() 中的位是我尝试使用 1 到 543 的任意列表发送初始化 MyClass。

标签: list python-3.x class object


【解决方案1】:

好吧,你的班级做了其他事情。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)])

【讨论】:

  • 所以我的理解是MyClass应该是返回一个列表索引,我写的函数就是计算出列表的长度,所以算法,我已经做了。 main 中的一点是我试图将该结果传递给 my_function。如果有帮助,我会将其中一个单元测试添加到我的原始帖子中。
  • MyClass 是一个类。它永远不会返回任何东西,只有一个如果它是方法。它是一组具有相关功能的数据。如果您想在a_list = MyClass(a_list) 之后获取对象列表的长度,请写print(len(a_list._list))
  • 所以这是测试的重点,只返回一个索引,但我不知道是索引还是int,我相当肯定返回的实际值是一个诠释。它不返回列表,否则 len(list) 会起作用。我不允许修改 MyClass。
【解决方案2】:

只是为了澄清您可能有的一些误解。

类不返回任何东西。它是创建对象的蓝图。

能返回值的是方法(函数)。例如,如果你想编写一个返回某个列表长度的方法:

def my_function(some_list):
    return len(some_list)

或者在你的情况下:

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

请注意,您不应将变量称为list。它是python中的一个内置函数,用于创建列表。

如您所见,python 中还有另一个内置函数len,它返回列表、元组、字典等的长度。

希望这会有所帮助,尽管您还不清楚您要实现的目标。

【讨论】:

  • 我没有写MyClass,我只是把名字改了放在这里,我试图获取从方法返回的int。我不允许更改方法,这是对算法的测试。
  • @iFunction,你的意思是什么方法? get 在 MyClass 内?
  • 是的,我应该找出 get 返回索引的列表的长度。我只需要知道如何获取返回到我的函数中的整数。我不断获取 MyClass 的内存位置,而不是 get 方法的返回值
  • 如果您需要获取get 方法返回的值,您可以试试这个:a_list = MyClass([...]),其中[...] 是一些列表。然后你只需调用get 方法:some_index = a_list.get(i),其中i 是你可以插入的任何整数。
  • 我已经将我的工作解决方案添加到我最初遇到的问题中,我只需要知道如何获得开始使用的价值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 2017-10-06
  • 1970-01-01
相关资源
最近更新 更多