Python 空构造函数

34

有没有办法在Python中创建一个空构造函数。我有一个类:

class Point:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

现在我是这样初始化它的:

p = Point(0, 5, 10)

我该如何创建一个空构造函数并像这样进行初始化:

p = Point()

3
第二个版本的 x、y 和 z 应该是什么?你只想要默认参数吗?你尝试过阅读教程或做一些研究吗? - jonrsharpe
4个回答

52
class Point:
    def __init__(self):
        pass

4
但这与当前实现不兼容。只能保留一个拥有该名称的方法。 - jonrsharpe
11
虽然此代码可能回答了问题,但提供有关它如何或为什么解决问题的附加背景将会提高答案的长期价值。 - Donald Duck
1
在“pass”的位置,也可以使用“1”或任何空操作。更多信息请参见:https://docs.python.org/2.0/ref/pass.html - HoldOffHunger

26

正如@jonrsharpe在评论中所说,您可以使用默认参数。

class Point:
    def __init__(self, x=0, y=0, z=0):
        self.x = x
        self.y = y
        self.z = z

现在您可以调用Point()


这个可以用,但是要小心。如果传递任何可变类型(对象、数组等),它将在所有实例之间共享。 - Kai Zheng

14

通过以略微不同的方式构建类,您可以实现所需的结果。

class Point:
    def __init__(self):
        pass

    def setvalues(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
    

setvalues 应该将 'self' 作为第一个参数吗?此外,所有这些实例变量不都应该在 __init__ 中定义吗? - RCross
1
@RCross 是的,它应该有self作为第一个参数,已经编辑反映出来了。如果我们在其中有实例变量声明,那么构造函数就不会是空的。但我同意这不是Pythonic的。 - William Pearsall

10
你需要为你的Point类定义一个带有可选参数的__init__()方法。
在你的情况下,这样做应该可以:
class Point:
    def __init__(self, x=0, y=0, z=0):
        self.x = x
        self.y = y
        self.z = z

pointA = Point(0, 5, 10)
print("pointA: x={}, y={}, z={}".format(pointA.x, pointA.y, pointA.z))
# print "pointA: x=0, y=5, z=10"

pointB = Point()
print("pointB: x={}, y={}, z={}".format(pointB.x, pointB.y, pointB.z))
# print "pointB: x=0, y=0, z=0"

这是最好的答案。它涵盖了原始问题所询问的所有内容。 - seanahern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接