【问题标题】:Python: list containing members of a classPython:包含类成员的列表
【发布时间】:2014-01-08 21:58:08
【问题描述】:
nop = 0
patron = list
def createnew(firstname, lastname, phone, age, gender):
    name = (lastname.lower() + ", " + firstname.lower())
    patron.append(patrons(name, phone, age, gender))
    nop += 1
class patrons():
number = 1

    def __init__(self, name, phone, age, gender):
        self.name = name
        self.phone = phone
        self.age = age
        self.gender = gender

我的代码中有几个部分用于保存有关图书馆顾客的信息的程序。我想要做的是将班级的所有成员(赞助人)存储在一个列表(赞助人)中,我知道这些名字有点令人困惑,我并没有真正在想,对此感到抱歉。我遇到的问题是,当我运行 createnew 函数时,我收到一个错误,上面写着“描述符 'append' 需要一个 'list' 对象,但收到了一个 'patrons'” 我的印象是我可以存储类对象在一个列表中。我无法做到这一点吗?如果我能做到,我需要改变什么?

【问题讨论】:

    标签: python list class


    【解决方案1】:

    patron = list 应该是patron = list():

    调用 list.append(1) 会重现与您提到的错误类似的错误:

    In [1]: list.append(1)
    TypeError: descriptor 'append' requires a 'list' object but received a 'int'
    

    要了解错误消息的含义,您可以从阅读methods are descriptors 的内容开始。另请注意,在 Python2 中,必须使用调用类的实例(例如 list)调用诸如 list.append 之类的未绑定方法。但这与解决问题几乎无关,除非您对错误的性质感到好奇。


    patron = list 使patron 等于内置类list。 patron = list() 使 patron 成为 list 类的实例。

    【讨论】:

      【解决方案2】:

      您应该将赞助人设置为

      patron = list()
      

      不相关,nop += 1 将抛出 UnboundLocalError。在createnew 内添加global nop 更多信息here

      【讨论】:

      • 谢谢,大家都知道了,但你也解决了第二个问题。感谢大家的帮助
      【解决方案3】:

      如前所述,list 应该是 list() 并且你应该给 nop 作为参数:

      nop = 0
      patron = list()
      def createnew(firstname, lastname, phone, age, gender, nop):
          name = (lastname.lower() + ", " + firstname.lower())
          patron.append(patrons(name, phone, age, gender))
          nop += 1
      
      class patrons():
          number = 1
          def __init__(self, name, phone, age, gender):
              self.name = name
              self.phone = phone
              self.age = age
              self.gender = gender
      

      【讨论】:

      • nop 是一个整数是不可变的,这意味着当您调用 nop += 1 时它会被重新分配并且不会改变全局变量
      猜你喜欢
      • 2010-10-04
      • 2015-07-20
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多