【问题标题】:Calling methods directly from a list filled with objectsA from objectB in python 3.7直接从一个列表中调用方法,该列表中填充了来自 python 3.7 中的对象的对象
【发布时间】:2018-12-04 02:39:33
【问题描述】:

我正在尝试从一个列表中调用方法,该列表中填充了来自定义该列表的不同类的对象。

考虑以下几点:

class ObjectA(object):
    def __init__(self, object_id):
        self.id = object_id
    def a_function(self):
        return self.id

from ObjectA import ObjectA
class ObjectB:
    def test():
        object_1 = ObjectA(1) # passing the id
        a_list = [ObjectA] # setting the list to be of type ObjectA (?)
        a_list.append(object_1)
        a_list[0].a_function() # Says I need to pass argument 'self'

这样的事情怎么可能发生?我知道我可以改为 a_list[0].id 并且它有效,但感觉不对。我更喜欢有 setter/getter。

编辑:我也知道,如果我像这样声明列表 a_list = [] 而不是 a_list = [ObjectA] 它也可以工作,但在这种情况下我无法访问自动完成的方法。

【问题讨论】:

  • 像 Spyder 或 PyCharm 这样的 IDE 会在这种情况下处理自动完成。这不是您的代码的问题,而是您的编辑器的问题。
  • 我正在使用 PyCharm,它会自动完成我上面编写的代码,但是代码无法运行它需要在方法中使用“self”。
  • 阅读我的答案,ˋself 问题来自您的 `a_list = [ObjectA]ˋ。不要这样写。

标签: python python-3.x list object methods


【解决方案1】:

在 Python 中,您不能指定列表的类型。所以a_list = [ObjectA] 这行没有意义。 (事实上​​,它创建了一个包含类 ObjectA 的列表,而不是一个对象,因此出现了 self 错误。)

a_list = [ObjectA] 替换为a_list = [] 以创建一个空列表

【讨论】:

  • 感谢您的回答。我知道 a_list = [] 但我希望有一个更好的解决方案,允许自动完成并使列表接受特定类型的对象,即使这并不是 Python 的真正工作方式。我会将您的答案标记为已接受。
  • 列表在 Python 中从来没有特定的类型。你甚至可以创建一个类似['a', 1] 的列表,每个值都是独立的。变量也是如此。你可以先a=1,然后a='a',它会起作用的。
猜你喜欢
  • 2012-04-30
  • 1970-01-01
  • 2013-10-06
  • 2017-03-02
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
相关资源
最近更新 更多