【发布时间】:2018-10-27 14:50:04
【问题描述】:
我创建了一个类foo,如下所示:
class foo():
def __new__(cls, a, b, c, add=True):
return cls.sum(a, b, c) if add else cls.subtract(a, b, c)
def sum(a, b, c):
return a + b + c
def subtract(a, b, c):
return c - b - a
print(foo(1, 2, 3, True))
此程序将所需结果返回为6。但是,我需要弄清一些概念:
- 使用这种方法或 OOP 设计是否正确,或者有更好的方法吗?我希望该类返回一个值或任何其他对象(不是它自己的类实例)
- 无论上面的结构如何,如果
sum和subtract是实例方法,如何在不实例化对象的情况下调用它们,如上例即print(...)?
我观察到许多 python API 和框架通过类实例化返回一个对象或一个值。
我正在尝试理解 Python 中 OOP 的核心概念,请帮助。
【问题讨论】:
-
使用
foo(1, 2, 3, True),您正在实例化对象 -
然而,在使用 PyCharm 时,它会显示一个错误(在编辑过程中)......但它会运行。这实际上让人感到困惑......然后我猜这是 PyCharm 的错误建议......
-
什么错误?请记住,PyCharm 试图猜测当代码实际运行而不实际运行时会发生什么。从我在这里读到的所有内容来看,它做得并不好。
-
为什么这是一个类?函数更有意义。
-
我同意。错误/建议是它要求您将
self添加到add和subtract方法,但是当我添加它们时,程序会抛出Missing Argument错误。这让我想知道add和subtract是否是实例方法。
标签: python python-3.x class oop