定义类构造函数有什么问题:
我正在尝试根据输入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
答案 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__
方法中影响对象的创建时刻,您只能初始化。