【问题标题】:Class Tutorial on Python.orgPython.org 上的课程教程
【发布时间】:2013-02-23 18:05:55
【问题描述】:

我对此有点生气,尝试使用 Python 3.3.0。

http://docs.python.org/3/tutorial/classes.html 上有一个类示例,代码如下:

class Bag:
    def __init__(self):
        self.data = []
    def add(self, x):
        self.data.append(x)

首先我想知道它缺少 Python3 通常需要的对象 class somename(object)

class Bag(object):

其次,当我尝试运行它时,我收到以下错误消息:

>>> a=Bag
>>> a.add('23')
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    a.add('23')
TypeError: add() missing 1 required positional argument: 'x'

WTF?

【问题讨论】:

    标签: python class python-3.3


    【解决方案1】:

    首先我想知道它缺少对象类 somename(object) Python3 通常需要的。

    在 Python 3 中,您的类将自动派生自 object,因此无需显式执行此操作。在 2 中没有这样做的唯一原因是为了向后兼容,因为所谓的新式(从对象派生)类的行为与旧式类略有不同。

    a=Bag
    

    这并没有创建Bag 的实例,它只是说a 现在是Bag 类的新名称。结果,当你使用

    a.add('23')
    

    您没有调用实例的 add 方法,因此该实例没有作为第一个参数传递(它不可能,因为还没有实例!)结果,它将“23”解释为self 的值,因此您没有传递x,因此

    TypeError: add() missing 1 required positional argument: 'x'
    

    试试

    >>> a = Bag()
    >>> a.add('23')
    >>> a.data
    ['23']
    

    改为。

    【讨论】:

      猜你喜欢
      • 2019-11-21
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 2020-02-19
      • 2016-05-23
      • 1970-01-01
      相关资源
      最近更新 更多