【问题标题】:Using class as a placeholder in Python3在 Python3 中使用类作为占位符
【发布时间】:2013-01-11 03:03:57
【问题描述】:

我看过很多关于 python 类的教程,但我正在尝试用它们做一些更基本的事情,但不知何故它不能正常工作。

我试图通过将它们放入类的占位符来制作 3 维点。

但是当我尝试打印make3Dpoint(x,y)的输出时

我得到类似<__main__.point object at 0x02D8FA30> 的信息。

当我尝试将此输出附加到列表时,我只得到 nonetype

显然,我是这方面的初学者,我不想采用任何高级方法来解决这个问题(而且我不允许参加这个课程)。我不想修改类本身。

有没有办法让这个输出可用?

class point():
    __slots__ = ('x','y','depth')

def calculate(x,y):
    z = x * y + 2 * x * y + 4
    return z

def make3Dpoint(x,y):
    z = calculate(x,y)
    point=point()
    point.x = x
    point.y = y
    point.depth = z
    return point

【问题讨论】:

  • 你的make3Dpoint 应该是你的point 类的__init__ 方法(按照惯例应该命名为Point)。

标签: python class placeholder slots


【解决方案1】:

列表append 方法返回None,但元素被添加到列表中。

>>> a = [1, 2]
>>> print(a.append(3))
None
>>> a
[1, 2, 3]

【讨论】:

  • 我的意思是说列表本身返回了无类型。我没有打印 .append 结果,而是在追加后的列表。在您的示例中, a 将返回 nonetype。
【解决方案2】:

像这样构造你的代码:

def calculate(x,y):
    z = x * y + 2 * x * y + 4
    return z

class Point:
    __slots__ = ('x', 'y', 'depth')

    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.depth = calculate(x,y)

points = []
points.append( Point(2,3) )
print points

【讨论】:

  • 啊,我不怀疑结构是有效的,是否可以在类中没有 init 函数的情况下做到这一点?我试图根本不修改课程。
  • 它将按照您目前的方式工作。但是在类中添加__init__ 方法并不先进。这是初始化对象的标准方法。
  • 好吧,我搞定了。谢谢您的帮助。具有讽刺意味的是,这最终成为任务中最简单的部分。我想我搞砸了实际的计算部分哈哈。
猜你喜欢
  • 2017-01-26
  • 2013-01-03
  • 1970-01-01
  • 2015-09-16
  • 2020-10-12
  • 1970-01-01
  • 2019-07-25
  • 2014-07-31
  • 2013-10-16
相关资源
最近更新 更多