【发布时间】:2023-03-15 17:38:01
【问题描述】:
如何定义具有两个可能输入的类构造函数:
class MSMeshFace(object):
def __init__(self, A=None, B=None, C=None)
def __init__(self, A=None, B=None, C=None, D=None)
所以显然这不起作用,但这就是我希望它表现的那样。如果有人输入 A、B、C,则从这三个变量构造 MSMeshFace,否则如果有人输入 A、B、C、D,则从所有四个变量构造它。这样做的正确方法是什么,这样当我调用它时,它看起来像这样:
newFace = MSMeshFace(A, B, C)
或
newFace = MSMeshFace(A,B,C,D)
它们都可以正常工作,但第一个创建一个“三角形”面,第二个创建一个“四边形”。如果可能的话,我不想做类似 newFace = MSMeshFace().Quad(A,B,C,D) 的事情。
或者我应该这样做:
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)
return triangleFace
else:
quadFace = MSMeshFace(self.a, self.b, self.c, self.d)
return quadFace
def addData(self, data):
self.data = data
这是构造该类的有效方法吗?
【问题讨论】:
-
好吧,如果您使用默认参数,那么只需做一些
if D: do_this()的东西?因为它们具有默认值,所以您不必在创建对象时包含它们。newface = MSMeshFace()仍然有效 -
def __init__(self, *args) 可以取任意数量
-
@Yoriz 关心一个例子吗?
-
@TehTris 所以如果有人在调用它时忽略了 D,它仍然是 None 但无论如何它都会正确启动?只是当你调用 self.D 时它会返回 None。对吗?
-
您已经回答了自己的问题。除了我建议
if self.D is None:。
标签: python class constructor