python中的类定义错误

时间:2014-12-05 15:38:55

标签: python class constructor

定义类构造函数有什么问题:

我正在尝试根据输入d是否保持None或获取值来构造两个不同的对象。

class MSMeshFace(object):

    def __init__(self, a= None, b= None, c= None, d= None):
            self.a = a
            self.b = b
            self.c = c
            self.d = d
            if self.d == None:
                    triangleFace = MSMeshFace(self.a, self.b, self.c)
                    self.count = 3
                    return triangleFace
            else:
                    quadFace = MSMeshFace(self.a, self.b, self.c, self.d)
                    self.count = 4
                    return quadFace

3 个答案:

答案 0 :(得分:2)

构造函数(嗯,初始化器,真的)不应该返回任何东西,它应该初始化一个新创建的实例。你想要的是:

class MSMeshFace(object):
    def __init__(self, a=None, b=None, c=None, d=None):
        self.a = a
        self.b = b
        self.c = c
        self.d = d
        self.count = 3 if self.d is None else 4

答案 1 :(得分:2)

如果您尝试根据参数返回不同类型的对象,请创建一个新函数,如:

def make_face(*args):
    if len(args) == 3:  # triangle face
        return TriMeshFace(*args)
    else:  # quad face
        return QuadMeshFace(*args)

您无法(通常)更改构造函数中的类型(但您可以在__new__中进行更改,但是您不需要这样做)。如果要向MSMeshface添加函数(正如您在注释中所建议的那样),请定义包含这些函数的基类,例如:

class MeshBase:
    def addData(self, data): pass
    def ToDSMeshFace(self): pass

class TriMeshFace(MeshBase): pass

class QuadMeshFace(MeshBase): pass

答案 2 :(得分:0)

您的意图似乎如下:

class MSMeshFace(object):
    def __init__(self, a= None, b= None, c= None, d= None):
        self.a = a
        self.b = b
        self.c = c
        self.d = d
        self.count = 3 if self.d is None else 4

将自动返回构造的对象。该对象已存在,由self指向。您不能在类的__init__方法中影响对象的创建时刻,您只能初始化